Массив, как отображать только "меняющиеся значения" - PullRequest
0 голосов
/ 22 сентября 2009

Допустим, у меня есть массив с датами и временами года, для каждого дня есть одна запись. Я хотел бы напечатать строку массива только при изменении значения сезона.

массив выглядит так:

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) 

Ответы [ 3 ]

3 голосов
/ 22 сентября 2009

Цикл, ведение учета прошлого сезона:

$lastSeason = '';

foreach ($array as $date => $season)
{
    if ($season != $lastSeason)
        echo "Season changed on " . $date;

    $lastSeason = $season;
}
1 голос
/ 22 сентября 2009

при условии, что ваш массив является массивом массивов:

if(count($array) > 0) {
  $prev = $array[0]['season'];

  foreach ($array as $row) {
    if ($row['season'] != $prev) echo $row['date'];

    $prev = $row['season'];
  }
}
1 голос
/ 22 сентября 2009

Сохраните состояние последней итерации и сравните ее с текущим состоянием. Если они различаются, распечатайте элемент:

$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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...