Предположим, у меня есть массив с датами и сезонами, есть одна запись за каждый день. Я хотел бы напечатать строку массива только тогда, когда меняется значение сезона.
массив выглядит так:
2009-10-28 00:00:00 (good season) 2009-10-29 00:00:00 (good season) 2009-10-30 00:00:00 (good season) 2009-10-31 00:00:00 (good season) 2009-11-01 00:00:00 (good season) 2009-11-02 00:00:00 (bad season) 2009-11-03 00:00:00 (bad season) 2009-11-04 00:00:00 (bad season) 2009-11-05 00:00:00 (bad season)
Прокрутитесь, сохранив рекорд прошлого сезона:
$lastSeason = ''; foreach ($array as $date => $season) { if ($season != $lastSeason) echo "Season changed on " . $date; $lastSeason = $season; }
Сохраните состояние последней итерации и сравните ее с состоянием текущего. Если они отличаются, напечатайте элемент:
$last = null; foreach ($array as $val) { if (preg_match('/^\d{4}-\d{2}\d{2} \d{2}:\d{2}:\d{2} \((good|bad) season\)$/', $val, $match)) { if ($last != $match[1]) { echo $val; } $last = $match[1]; } }
предполагая, что ваш массив представляет собой массив массивов:
if(count($array) > 0) { $prev = $array[0]['season']; foreach ($array as $row) { if ($row['season'] != $prev) echo $row['date']; $prev = $row['season']; } }