我需要按值输出对多维数组进行排序。我无法按日期对嵌套数组进行分组,并将其与标题(日期)一起输出。 有一个数组:
Array (
[0] => (
[ID] => 959
[title] => title
[post_date] => 2018-01-01 10:17:49
)
[1] => (
[ID] => 960
[title] => title
[post_date] => 2018-01-01 10:17:49
)
[2] => (
[ID] => 961
[title] => title
[post_date] => 2018-01-02 10:17:49
)
[3] => (
[ID] => 962
[title] => title
[post_date] => 2014-01-02 10:17:49
)
[4] => (
[ID] => 963
[title] => title
[post_date] => 2014-01-03 10:17:49
)
)
结果,我需要得到这个。 标题和日期的所有数组都有一个日期。
Result
- 2018-01-01 -
id: 959 Title
id: 560 Title
- 2018-01-02 -
id: 961 Title
id: 562 Title
- 2018-01-02 -
id: 963 Title
.....
答案 0 :(得分:1)
你有关于排序的部分吗?我猜你是。所以唯一剩下的就是“分组”。
但实际上您不需要对数据进行分组。只需逐个迭代已排序的项目并记住上一个元素的日期。一旦当前元素和前一个元素的日期不同 - 您输出“标题”。这样的事情:
$data = [[a=> 2, b=> 1], [a=> 2, b=> 4], [a=> 3, b=> 1], [a=> 4, b=> 0]];
$previous_a = null;
foreach($data as $item) {
if ($item['a'] != $previous_a) {
echo 'header --- '.$item['a'].'<br />';
}
$previous_a = $item['a'];
echo $item['b'].'<br />';
}
答案 1 :(得分:0)
您可以尝试这样的事情:
$aggreg = [] ;
foreach ($array as $item) {
$day = $item['post_date'];
// if you want to group by day, just use $day = substr($day,0,10) ;
$aggreg[$day][] = 'id: ' . $item['ID'] . " " . $item['title'] ;
}
krsort($aggreg) ; // or ksort() or just comment this line.
// then build the output :
$output = "" ;
foreach ($aggreg as $day => $data) {
$output .= "- " .substr($day,0,10) . " -\n\n" . implode("\n", $data) . "\n\n" ;
}
print $output ;
输出:
- 2018-01-02 -
id: 961 title
- 2018-01-01 -
id: 959 title
id: 960 title
- 2014-01-03 -
id: 963 title
- 2014-01-02 -
id: 962 title
NB 如果您必须以HTML格式输出,请将\n
更改为<br>