如何按索引1对无键名PHP多维数组进行排序?
按子数组第二个元素排序的最佳方法
嘿,这个问题其实很好解决!在PHP里,我们可以用usort()函数配合自定义的比较逻辑,轻松实现按每个子数组的第二个元素排序。
基础升序排序(PHP7+推荐)
直接使用PHP7引入的太空船运算符(<=>),它能简洁地处理数值比较,返回我们需要的-1、0、1结果,完美适配usort()的要求:
$edibles = [ ['Apple', 250], ['Pear', 300], ['Cherry', 270], ['Tomato', 300], ['Carrot', 240], ['Potato', 170] ]; // 按子数组的第二个元素升序排序 usort($edibles, function($a, $b) { return $a[1] <=> $b[1]; });
运行后,数组会变成这样的顺序:['Potato', 170] → ['Carrot', 240] → ['Apple', 250] → ['Cherry', 270] → ['Pear', 300] → ['Tomato', 300]
降序排序
如果需要从大到小排列,只需要把比较的两个元素调换位置即可:
usort($edibles, function($a, $b) { return $b[1] <=> $a[1]; });
兼容PHP5的写法
要是你的环境还在使用PHP5,就用传统的条件判断来实现比较逻辑:
usort($edibles, function($a, $b) { if ($a[1] == $b[1]) { return 0; } // 升序:小的在前返回-1,大的在前返回1 return ($a[1] < $b[1]) ? -1 : 1; });
进阶:处理相同数值的元素
如果遇到第二个元素数值相同的情况(比如Pear和Tomato都是300),可以在比较函数里添加额外逻辑,比如按第一个元素的字符串顺序排序,让结果更规整:
usort($edibles, function($a, $b) { // 先比较数值 $numCompare = $a[1] <=> $b[1]; if ($numCompare !== 0) { return $numCompare; } // 数值相同时,按名称的字母顺序升序排列 return strcmp($a[0], $b[0]); });
这样排序后,相同数值的元素会按名称的字母顺序排列,比如Pear会排在Tomato前面~
内容的提问来源于stack exchange,提问作者Arno Nymo
相关产品推荐
相关产品推荐

