2017-08-10 57 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", 
    ], 
    // ... 
} 

現在,你可以簡單地做像「每個組的這個對象的」一環,然後「爲這個每個日期組」。