сформировать два массива в цикле проверки состояния изменения состояния зажигания

Мне нужна логика, которая проверяет изменение состояния зажигания, и если зажигание включено, вставьте этот индекс в начальный массив, а если состояние затем изменится на выключение, нажмите на остановочный массив, чтобы я мог рассмотреть один индекс начального массива, чтобы остановить индекс массива как одну поездку. У меня была логика, но это выдвигает все начальные значения и все конечные значения Мне нужен только индекс изменения состояния

$isIgniOn = false;  $startArray = array(); $stopArray = array();

for ($i = 0; $i < count($reportData); $i++) {

if ($reportData[$i]['ignition_status'] == 1) {
$startArray[] = $i;
$isIgniOn = true;

} else {
if ($isIgniOn) {
$isIgniOn = false;
$stopArray[] = $i;
} else {
$startArray[] = $i;
}

}

}

0

Решение

Проблема в том, что вы на самом деле не проверяете, изменилось ли состояние, и вам нужно добавить дополнительную логику в вашу программу:

$isIgniOn = false;  $startArray = array(); $stopArray = array();

for ($i = 0; $i < count($reportData); $i++) {

if ($reportData[$i]['ignition_status'] == 1 && !$isIgniOn) {
$startArray[] = $i;
$isIgniOn = true;

} elseif ($reportData[$i]['ignition_status'] == 0 && $isIgniOn) {
{
$isIgniOn = false;
$stopArray[] = $i;
}

}

}
0

Другие решения

Вы не далеко, но вам нужно проверить, когда изменения сделаны. Я немного упростил, изменив $isIgniOn так же, как ваш $reportData значения (как в 0 и 1, а не как истина и ложь)

$isIgniOn = 0;
$startArray = array();
$stopArray = array();

for ($i = 0; $i < count($reportData); $i++) {
$newState = $reportData[ $i ]['ignition_status'];
if ( $newState != $isIgniOn ){
if ( $newState == 1)    {
$startArray[] = $i;
}
else    {
$stopArray[] = $i;
}
$isIgniOn = $newState;
}
}
0

По вопросам рекламы [email protected]