[英]group array of object by dates in php
Mysql 查詢:
select id, ad_click, contact_submit, MONTH(datetime) as months, YEAR(datetime) years from wpxc_leaderboard_counters order by datetime
它以這種方式顯示結果:
Array (
[0] => Array (
[0] => stdClass Object (
[id] => 2 [ad_click] => 0 [contact_submit] => 0 [datetime] => 2019-11-01
)
[1] => stdClass Object (
[id] => 3 [ad_click] => 0 [contact_submit] => 0 [datetime] => 2019-11-01
)
[2] => stdClass Object (
[id] => 4 [ad_click] => 1 [contact_submit] => 0 [datetime] => 2019-11-01
)
[3] => stdClass Object (
[id] => 5 [ad_click] => 0 [contact_submit] => 1 [datetime] => 2019-11-01
)
[4] => stdClass Object (
[id] => 1 [ad_click] => 3 [contact_submit] => 2 [datetime] => 2019-12-06
)
)
)
但想以這種方式顯示:
Array (
[0] => Array (
[11] => stdClass Object (
[id] => 2 [ad_click] => 0 [contact_submit] => 0 [datetime] => 2019-11-01
[id] => 3 [ad_click] => 0 [contact_submit] => 0 [datetime] => 2019-11-01
[id] => 4 [ad_click] => 1 [contact_submit] => 0 [datetime] => 2019-11-01
[id] => 5 [ad_click] => 0 [contact_submit] => 1 [datetime] => 2019-11-01
)
[12] => stdClass Object (
[id] => 1 [ad_click] => 3 [contact_submit] => 2 [datetime] => 2019-12-06
)
)
)
希望這可以通過修改數組來實現,因為我使用了不同的方法並且花了很多時間但還沒有取得任何成果。
在獲取查詢結果時,您可以使用日期的 substring 作為數組鍵。
while ($row = $query->fetch_object()) {
$result[substr($row->datetime, 5, 2)][] = $row;
}
您顯示的數組與您的查詢不太匹配。 如果您已經在查詢中選擇了 MONTH,則不需要使用substr
。 您可以使用
$result[$row->months][] = $row;
我還建議您考慮按年份和月份進行分組,以便將來進行排序,但這可能暫時無關緊要,因為您的查詢是按日期時間排序的。 這取決於您打算如何使用分組數據,但如果您將年份作為鍵的一部分,您可以確保這些組將始終正確排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.