Показывать каждую дату только один раз - PullRequest
0 голосов
/ 03 октября 2009

Хорошо, это, должно быть, очень простой вопрос, и я прошу прощения за это.

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

Я ищу простой способ показывать каждую дату только один раз в цикле foreach. Я перебираю данные примерно так:

<?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>";
 ?>

И каждый элемент содержит дату, поэтому я получаю одну и ту же дату несколько раз. Я бы хотел, чтобы каждая дата отображалась только один раз, например, http://daringfireball.net.

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

Я довольно новичок в PHP, и я действительно хочу узнать больше, чем просто получить решение.

Любая помощь, которую вы могли бы оказать, была бы великолепна!

Ответы [ 2 ]

3 голосов
/ 03 октября 2009

Вам нужно запомнить, какой датой вы пользовались в последний раз, и распечатать ее, только если она отличается. Вы можете попробовать что-то вроде:

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

(И не забудьте HTML-кодировать заголовки и ссылки, используя htmlspecialchars.)

0 голосов
/ 03 октября 2009

Вы хотите сказать, что хотите, чтобы дата отображалась только один раз, перед циклом или один раз за цикл, чтобы она выглядела так:

Дата 1
- позиция 1
- позиция 2
- и т.д ...

Дата 2
- пункт 1
- позиция 2
- и т.д ...

Не могли бы вы уточнить формат? Потому что на данный момент дата должна быть показана один раз для каждого действительного $ i.

...