Мне нужна логика, которая проверяет изменение состояния зажигания, и если зажигание включено, вставьте этот индекс в начальный массив, а если состояние затем изменится на выключение, нажмите на остановочный массив, чтобы я мог рассмотреть один индекс начального массива, чтобы остановить индекс массива как одну поездку. У меня была логика, но это выдвигает все начальные значения и все конечные значения Мне нужен только индекс изменения состояния
$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;
}
}
}
Проблема в том, что вы на самом деле не проверяете, изменилось ли состояние, и вам нужно добавить дополнительную логику в вашу программу:
$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;
}
}
}
Вы не далеко, но вам нужно проверить, когда изменения сделаны. Я немного упростил, изменив $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;
}
}