2013-05-17 3 views
-1

У меня есть многомерный массив PHP как этотПроверьте два последовательных значения в PHP массив

$array[0] = array('status' => 'Waiting' , 'number' => 10); 
$array[1] = array('status' => 'Missed' , 'number' => 20); 
$array[2] = array('status' => 'Waiting' , 'number' => 30); 
$array[3] = array('status' => 'Missed' , 'number' => 40); 
$array[4] = array('status' => 'Waiting' , 'number' => 50); 
$array[5] = array('status' => 'Waiting' , 'number' => 60); 
$array[6] = array('status' => 'Waiting' , 'number' => 70); 

Я хочу, чтобы получить numbers из $array[4] и $array[5], потому что Там нет Missed между ними. Как я могу сделать это с помощью php. Какой простой способ?

ВЫВОД

50 and 60 
+0

Существует также отсутствие «пропущенных» между 5 и 6. Как вы хотите справиться с этим? Вам нужны только первые результаты? –

+0

Как насчет $ array [5] и $ array [6]? Они также не имеют «Пропущенных» между ними. –

+0

Мне нужны только первые два результата совпадения и избегайте всех остальных –

ответ

2
<?php 
$array[0] = array('status' => 'Waiting' , 'number' => 10); 
$array[1] = array('status' => 'Missed' , 'number' => 20); 
$array[2] = array('status' => 'Waiting' , 'number' => 30); 
$array[3] = array('status' => 'Missed' , 'number' => 40); 
$array[4] = array('status' => 'Waiting' , 'number' => 50); 
$array[5] = array('status' => 'Waiting' , 'number' => 60); 
$array[6] = array('status' => 'Waiting' , 'number' => 70); 
$last_status = ''; 
$last_number = ''; 
foreach($array as $foo){ 
    if($foo['status'] == $last_status && $last_status == 'Waiting'){ 
     echo "$last_number and $foo[number]"; 
     break; 
    } 
    $last_status = $foo['status']; 
    $last_number = $foo['number']; 
} 
?> 

Codepad example

+1

благодаря тому, что это сэкономило большую часть моего времени. я ценю вашу помощь –

0
for($i = 1; $i < count($array); $i++) { 
    if($array[$i - 1]['status'] == 'Waiting' && $array[$i]['status'] == 'Waiting') { 
     echo $array[$i - 1]['number'] . ' AND ' . $array[$i]['number']; 
     break; 
    } 
} 
0

Другой способ сделать это:

$array[0] = array('status' => 'Waiting' , 'number' => 10); 
$array[1] = array('status' => 'Missed' , 'number' => 20); 
$array[2] = array('status' => 'Waiting' , 'number' => 30); 
$array[3] = array('status' => 'Missed' , 'number' => 40); 
$array[4] = array('status' => 'Waiting' , 'number' => 50); 
$array[5] = array('status' => 'Waiting' , 'number' => 60); 
$array[6] = array('status' => 'Waiting' , 'number' => 70); 

array_walk(
     $array 
    , function ($value, $index, &$prev) { 
     if ($value['status'] == $prev['status'] && $prev['status'] == 'Waiting') { 
      echo $prev['number'] . ' AND ' . $value['number'] . PHP_EOL; 
     }  

     $prev = $value; 

    }, array(
      'status' => '' 
     , 'number' => 0 
    ) 
); 

See the demo

Смежные вопросы