Остановить сортировку по массиву, чтобы удалить дубликаты

Используя expressionengine, у меня есть пара таких циклов:

{exp:channel:entries ........} <--- CMS Loop starts --->

 $data ="{event_day}.{event_month}.{event_year }"; // will output 19.21.2013 
      $titlu = htmlentities("{title}"); // string
      $link = "{adresa_externa}"; // website
      $arrContent3[strtotime($data)] = substr($data, 0, 5)." - ". "<a href='$link'> " . $titlu ."    </a>";
  {/exp:channel:entries} <--- cms loops ends --- >

После массива у нас есть следующий код:

<---- outputing in chronological order based on day year month --->
    <?php 
    ksort($arrContent3) ;
    echo html_entity_decode(implode("</li><li>", $arrContent));
    ?>

Проблема в том, что если существуют 2 вещи с одинаковой датой. Только один будет отображаться в списке.

Я не имею понятия почему:(

2 ответа

Проблема в том, что когда вы устанавливаете запись массива $arrContent[strtotime($data)] и у вас уже есть запись для того же значения $data, тогда вторая перезаписывает первую.

Таким образом, вместо присвоения скалярного значения переменной $arrContent[strtotime($data)], присвойте элемент массива,

$arrContent[strtotime($data)][] = expression;

Выполните ksort() так же, как вы, чтобы получить их в порядке дат, но затем переберите листья массива, чтобы создать одномерный массив,

foreach($arrContent as $arrDateContent) {
    foreach($arrDateContent as $content) {
        $arrContentAll[] = $content;
    }
}

Вы можете сделать эхо,

echo html_entity_decode(implode("</li><li>", $arrContentAll));

Редактировать:

Таким образом, код (из оригинального вопроса) становится:

{exp:channel:entries ........} <--- CMS Loop starts --->

 $data ="{event_day}.{event_month}.{event_year }"; // will output 19.21.2013 
      $titlu = htmlentities("{title}"); // string
      $link = "{adresa_externa}"; // website
      $arrContent3[strtotime($data)][] = substr($data, 0, 5)." - ". "<a href='$link'> " . $titlu ."    </a>";
  {/exp:channel:entries} <--- cms loops ends --- >

а затем для второй части,

<---- outputing in chronological order based on day year month --->
    <?php 
    ksort($arrContent3) ;
    foreach($arrContent3 as $arrDateContent) {
        foreach($arrDateContent as $content) {
            $arrContentAll[] = $content;
        }
    }
    echo html_entity_decode(implode("</li><li>", $arrContentAll));
    ?>

Проще всего с вашим существующим кодом было бы установить $i = 0; перед циклом:

$arrContent3[strtotime($data).$i++] = substr($data, 0, 5)." - ". "<a href='$link'> " . $titlu ."    </a>";

Хотя я понятия не имею, как ты $arrContent3 в $arrContent,

Другие вопросы по тегам