使用值按输出对数组进行排序

时间:2018-01-25 20:30:16

标签: php arrays

我需要按值输出对多维数组进行排序。我无法按日期对嵌套数组进行分组,并将其与标题(日期)一起输出。 有一个数组:

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

.....

2 个答案:

答案 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>