如何在PHP中按order值对含嵌套键值的数组进行升序排序?
按嵌套数组的
order字段升序排序的PHP实现 这事儿很简单!针对你这种带嵌套键值对的数组,我们可以用PHP的uasort()函数(如果需要保留原数组的键名)或者usort()(不在乎键名的话),配合自定义比较逻辑来实现按order字段升序排序。
保留原数组键名的方案(推荐)
因为你的原数组有特定的数字键,大概率需要保留这些键,所以用uasort()最合适:
// 你的原始数组 $items = [ 1240830 => ['name' => 'Jannah', 'order' => 8], 1240831 => ['name' => 'Eadie', 'order' => 10], 1240832 => ['name' => 'abc@yahoo.ca', 'order' => 0], 1240911 => ['name' => 'on', 'order' => 0], ]; // 按order字段升序排序,同时保留原键 uasort($items, function($a, $b) { // 太空船运算符直接比较order值,返回-1/0/1实现升序 return $a['order'] <=> $b['order']; }); // 查看排序后的结果 print_r($items);
运行后你会得到这样的结果:
Array ( [1240832] => Array ( [name] => abc@yahoo.ca [order] => 0 ) [1240911] => Array ( [name] => on [order] => 0 ) [1240830] => Array ( [name] => Jannah [order] => 8 ) [1240831] => Array ( [name] => Eadie [order] => 10 ) )
兼容低版本PHP的写法(PHP < 7.0)
如果你的PHP版本低于7.0,不支持太空船运算符<=>,可以换成传统的比较逻辑:
uasort($items, function($a, $b) { if ($a['order'] === $b['order']) { return 0; } // 升序:小的在前,所以a的order更小就返回-1 return $a['order'] < $b['order'] ? -1 : 1; });
不需要保留原键的情况
如果不在乎原数组的键名,直接用usort()替换uasort()就行,排序后键会被重置为从0开始的连续数字索引。
内容的提问来源于stack exchange,提问作者Rana. Amir
相关产品推荐
相关产品推荐

