2009-10-03 8 views
0

Très bien, cela doit être une question absolument facile, et je m'en excuse. Je m'excuse également si j'ai simplement échoué à trouver les bons termes de recherche à utiliser pour arriver à une réponse par moi-même. J'ai essayé, mais mon manque de maîtrise de PHP me rend malade.Montrer chaque date une seule fois

Je cherche un moyen simple d'afficher chaque date une seule fois dans une boucle foreach. Je boucle à travers les données comme ceci:

<?php 
    echo "<ul>"; 
    foreach($rss_items as $i){ 
    if($i->get_feed()->get_title() == 'Twitter (no @ replies)'){ 
    echo "<li>"; 
    echo $i->get_date(); 
    echo "<a href='" .$i->get_link()."'>Twitter</a>"; 
    echo $i->get_title(); 
    echo "</li>"; 
    } 
    elseif($i->get_feed()->get_title() == 'Pinboard (jpcody)'){ 
    echo "<li>"; 
    echo $i->get_date(); 
    echo "<a href='" .$i->get_link()."'>Pinboard</a>"; 
    echo $i->get_title(); 
    echo "</li>"; 
    } 
    elseif($i->get_feed()->get_title() == 'Entries at Church Marketing Sucks by Joshua Cody'){ 
    echo "<li>"; 
    echo $i->get_date(); 
    echo "<a href='" .$i->get_link()."'>Church Marketing Sucks</a>"; 
    echo "<a href='" .$i->get_link()."'>" . $i->get_title() . "</a>"; 
    echo $i->get_description(); 
    echo "</li>"; 
    } 
    elseif($i->get_feed()->get_title() == 'Flickr remove first paragraph'){ 
    echo "<li>"; 
    echo $i->get_date(); 
    echo "<a href='" .$i->get_link()."'>Flickr</a>"; 
    echo "<a href='" .$i->get_link()."'>" . $i->get_title() . "</a>"; 
    echo $i->get_description(); 
    echo "</li>"; 
    } 
    } 
    echo "</ul>"; 
?> 

Et chaque élément contient la date, je reçois la même date à plusieurs reprises. Je voudrais seulement avoir chaque date montrée une fois, un la http://daringfireball.net. J'utilise CodeIgniter et la bibliothèque SimplePie, donc toutes les données sont tirées directement au lieu d'être stockées dans une base de données. J'imagine qu'une façon de le faire pourrait inclure une seconde instruction if pour vérifier si la date a déjà été utilisée, mais je ne sais pas comment l'exécuter. Je suis novice en PHP, et je cherche vraiment à apprendre plus que juste avoir une solution donnée.

Toute aide que vous pourriez donner serait géniale!

Répondre

2

Vous devez vous rappeler quelle était la date que vous avez utilisée en dernier et l'imprimer seulement si elle diffère. Vous pouvez essayer quelque chose comme:

$previous_date = null; 
foreach ($rss_items as $item) { 
    if ($item->get_date() != $previous_date) { 
     $previous_date = $item->get_date(); 
     echo '<li>' . $previous_date . '</li>'; 
    } 
    ... 
} 

(Et ne pas oublier de code HTML les titres et les liens en utilisant htmlspecialchars.)

+0

Merci beaucoup Lukas, je vais me coucher maintenant, mais je vais essayer cela demain et assurez-vous d'accorder un crédit approprié si cela fonctionne pour moi ou demander un suivi si je suis trop dense pour l'obtenir encore. Merci encore! –

+0

Hey Lukas, cela a fonctionné! Est-ce que je comprends comment cela fonctionne correctement: (1) Définit une variable vide afin qu'elle puisse être utilisée et la première date sera affichée. (2) Si la date de l'élément de la liste n'est pas égale à la valeur de var, alors nous mettons la date précédente à la date actuelle et nous renvoyons l'écho à la date actuelle. (3) L'élément suivant vérifie si son propre get_date est égal à la variable récemment stockée, et si c'est le cas, il ne renvoie pas sa date. Est-ce que la date_précédente est un peu impropre, car la date de l'élément actuel est stockée dans cette variable? –

+0

Cela dépend de la façon dont vous le regardez. :) Oui, la date actuelle est stockée dans la variable, mais chaque fois que vous la comparez, elle contient la valeur d'une itération précédente de la boucle. –

0

Voulez-vous dire que vous voulez que la date à afficher une fois, avant que la boucle, ou une fois par boucle pour qu'il ressemble à:

Date 1
- article 1
- article 2
- etc ...

date 2
- article 1
- article 2
- etc ...

Pourriez-vous préciser le format? Parce qu'au moment la date devrait être montrée une fois pour chaque $ i qui est valide.

+0

mes excuses à ce sujet. Vous avez raison dans votre compréhension. Je voudrais que la date s'affiche une fois, et chaque élément pour ce jour en dessous sans répétition de date. –

+0

Essayez la réponse de Lukas, si cela ne fonctionne pas, vous pouvez essayer d'exécuter deux boucles foreach, une qui définit la date appropriée d'abord, puis la seconde qui remplit le contenu respectif. (Pas très joli, mais ça devrait marcher) J'espère que ça marchera! – Zolomon

Questions connexes