2017-08-10 55 views
0

我想遍历一个foreach并按日期对结果进行分组。循环遍历一个foreach,然后将数据分组到日期数组中

例子:

2017-10-05 
2017-10-05 

2017-10-07 

2017-10-10 
2017-10-10 
2017-10-10 

...等等

由于我不知道如何做到这一点我有只为一个foreach循环标准代码。我应该指出数据来自XML提要。上述

foreach($streamData->channel->item as $item) { 
     echo $item->date.'<br>'; 
    } 

的代码打印这样的日期:

2017-10-05 
2017-10-05 
2017-10-07 
2017-10-10 
2017-10-10 
2017-10-10 

...等等

我怎样才能做到这一点的例子显示了?

+0

当日期改变了所有你想要做的事情时,是否放空线? – RiggsFolly

+0

不,很好。所以日期是一些事件数据的一部分。 我有活动名称,团队1,团队2,日期和时间。我基本上想显示日期,然后显示该日期下的所有相关事件。然后移动到下一个日期并重复 – craigb88

+0

试试这个https://stackoverflow.com/questions/7517190/insert-blank-row-between-groups-of-rows-and-sorted-by-id-in-sql – user1844933

回答

0

如果您只想确定何时执行事件处理,那么这是你可能会用到的某种结构。

$last_date = null; 
foreach($streamData->channel->item as $item) { 
    if ($last_date != $item->date) { 
     echo '<br>' . $item->date . '<br>'; 
    } 

    $last_date = $item->date; 
    // do event processing 
} 

这可能有多准确取决于您从哪里获取活动信息。

0

因为我没有任何物体的数据来测试我不知道它的工作原理,但也许..

编辑我的阵列上测试,看来我错了。这是什么在数组上工作;
https://3v4l.org/VSJeQ
我想我把你的对象与这个数组相匹配。

foreach($streamData->channel->item as $item) { 
    echo item->date.'<br>'; 
    if(next($streamData)->date != $item->date) echo '<br>'; 
} 

基本上使用next(),以查看是否下一个项目是不一样的电流。如果是这样,请加另一个<br>

编辑;它现在可能需要更改为下一个($ item)而不是next($ item-> date)

0

另一个可能的解决方案是创建地图,并将每个日期分组存储为地图的成员。这些成员的值将是日期数组,可以通过日期月键在常量时间O(1)中访问,当您想要搜索组或类似事件时,稍后不需要循环。

举例来说,这是我在想什么JSON表示:

{ 
    "10": [ 
     "2017-10-10", 
     "2017-10-10", 
     "2017-10-10", 
    ], 
    "9": [ 
     "2017-10-9", 
     "2017-10-9", 
     "2017-10-9", 
    ], 
    // ... 
} 

现在,你可以简单地做像“每个组的这个对象的”一环,然后“为这个每个日期组”。