2017-08-10 14 views
0

我需要一个检查点火状态变化的逻辑,并且如果点火装置将该索引推入起始阵列并且如果状态变为关闭推入停止阵列我可以考虑一个开始数组索引来停止数组索引作为一个行程。我有一个逻辑,但这个全押起始值和所有的停止值我只需要状态变化指数在for循环中形成两个阵列检查点火状态变化条件

$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

感谢的作品 – Prashanth

0

您并不遥远,但您需要检查何时进行更改。我稍微简化IT,通过改变$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; 
    } 
}