2009-09-22 16 views
0

Disons que j'ai un tableau avec des dates et des saisons, il y a une entrée pour chaque jour. Je voudrais imprimer la rangée de tableau seulement quand la valeur de saison change.Tableau, comment afficher les "valeurs changeantes" seulement

le regard du tableau comme ça:

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) 

Répondre

3

boucle à travers, en gardant une trace de la dernière saison:

$lastSeason = ''; 

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

    $lastSeason = $season; 
} 
1

Stocker l'état de la dernière itération et le comparer à l'état du actuel. Si elles diffèrent, imprimer l'article:

$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]; 
    } 
} 
+0

pourquoi utiliser des expressions rationnelles complexes pour un simple problème? – knittl

+0

au moins, il a l'air cool – Roch

1

en supposant que votre tableau est un tableau de tableaux:

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

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

    $prev = $row['season']; 
    } 
} 
Questions connexes