停止数组排序以删除重复项

时间:2014-08-21 14:14:26

标签: php arrays sorting duplicates date-sorting

使用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 个答案:

答案 0 :(得分:0)

问题是,当您设置数组条目$ 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));
    ?>

答案 1 :(得分:0)

现有代码最简单的方法是在循环之前设置$i = 0;,然后:

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

虽然我不知道你是如何从$arrContent3转到$arrContent的。