0
点赞
收藏
分享

微信扫一扫

PHP 根据嵌套数组中的某个值进行排序(对数据库结果进行排序)

毅会 2022-07-12 阅读 163


经常需要根据嵌套数组中的某个值进行排序,例如新闻列表的id倒叙、发布时间倒序排列等。这里有两种方法。

使用​​array_multisort​​函数来排序

​array_multisort()​​​ 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
成功时返回 TRUE, 或者在失败时返回 FALSE。

<?php
$news = [
['id' => 1, 'title' => '标题1', 'publish_at' => '2020-02-18 14:00:00'],
['id' => 2, 'title' => '标题2', 'publish_at' => '2020-02-18 15:00:00'],
['id' => 3, 'title' => '标题3', 'publish_at' => '2020-02-18 16:00:00']
];
//取出数组中id的一列,返回一维数组
// $news_key 结果:[1,2,3]
$news_key = array_column($news, 'id');

// 排序,根据$news_key排序,不用重新赋值
// 结果是$news按照id的值倒序排列。
array_multisort($news_key, SORT_DESC, $news);
print_r($news);

结果:

Array
(
[0] => Array
(
[id] => 3
[title] => 标题3
[publish_at] => 2020-02-18 16:00:00
)

[1] => Array
(
[id] => 2
[title] => 标题2
[publish_at] => 2020-02-18 15:00:00
)

[2] => Array
(
[id] => 1
[title] => 标题1
[publish_at] => 2020-02-18 14:00:00
)

)

两个数组要有相同个数的元素。第二个数组里的项目对应第一个数组后也进行了排序,对应关系不会断。此例是按照第一个数组倒序排列,每个元素对应的第二个数组元素也跟着变化顺序了。

使用​​uasort​​自定义函数排序

使用用户自定义的比较函数对数组中的值进行排序。还有​​usort​​​。
成功时返回 TRUE, 或者在失败时返回 FALSE。

<?php
$news = [
['id' => 1, 'title' => '标题1', 'publish_at' => '2020-02-18 14:00:00'],
['id' => 2, 'title' => '标题2', 'publish_at' => '2020-02-18 15:00:00'],
['id' => 3, 'title' => '标题3', 'publish_at' => '2020-02-18 16:00:00']
];

// 按日期从大到小排序(倒叙),其实也可以不用转换成时间戳
uasort($news, function($x, $y){return strtotime($x['publish_at']) <= strtotime($y['publish_at']);});
print_r($news);

参考

​​https://www.php.net/uasort​​​​​​

​​https://www.php.net/array_multisort​​


举报

相关推荐

0 条评论