我想循环一遍,并按日期对结果进行分组。
示例:
2017-10-05
2017-10-05
2017-10-07
2017-10-10
2017-10-10
2017-10-10..。诸若此类
由于我不知道如何完成这一任务,所以我只有要循环的标准代码。我应该指出,数据来自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..。诸若此类
如示例所示,我如何做到这一点?
发布于 2017-08-10 14:10:45
如果您只想决定什么时候进行事件处理,那么这就是您可能使用的构造类型。
$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
}这可能会有多精确取决于您从何处获得事件信息。
发布于 2017-08-10 14:07:38
因为我没有任何要测试的对象数据,所以我不确定它是否有效,但是也许..。
编辑,我测试了一个数组,似乎我错了。下面是一个数组的工作原理; https://3v4l.org/VSJeQ 我想我把你的对象和这个数组相匹配了。
foreach($streamData->channel->item as $item) {
echo item->date.'<br>';
if(next($streamData)->date != $item->date) echo '<br>';
}基本上使用next()来查看下一项是否与当前的项相同。如果是真的,添加另一个<br>
编辑;它可能需要更改为next($item),而不是next($item->date)。
发布于 2017-08-10 14:17:20
另一个可能的解决方案是创建一个映射,并将每个日期分组存储为映射的成员。这些成员的值将是日期数组,可以在固定时间O(1)中按日期月键访问,当您想要搜索组或类似的东西时,以后不需要循环。
例如,这是我所想的JSON表示:
{
"10": [
"2017-10-10",
"2017-10-10",
"2017-10-10",
],
"9": [
"2017-10-9",
"2017-10-9",
"2017-10-9",
],
// ...
}现在,您可以简单地执行一个循环,如“针对此对象的每个组”,然后“针对此组的每个日期”。
https://stackoverflow.com/questions/45615889
复制相似问题