PHP多维索引数组按指定子元素排序问题求助
按子数组第0个元素排序多维数组(保持元素关联)
没问题,这个需求在PHP里用自定义排序函数就能轻松搞定,我来给你一步步讲清楚怎么实现:
完整代码示例
<?php $fruits = array( array(2, 'apple'), array(1, 'orange'), array(4, 'banana'), array(3, 'kiwi'), ); // 用usort配合自定义回调实现排序 usort($fruits, function($a, $b) { // 核心逻辑:比较两个子数组的第0个元素 return $a[0] - $b[0]; }); // 查看排序后的结果 print_r($fruits); ?>
代码细节解释
usort()是PHP专门用来做自定义规则排序的函数,它会直接对原数组进行排序(如果想保留原数组,可以先复制一份再操作,比如sortedFruits = $fruits; usort($sortedFruits, ...))。- 匿名回调函数里的
$a和$b代表数组中任意两个待比较的子数组,我们通过$a[0] - $b[0]来对比它们的第0个元素:- 结果为负数时,
$a排在$b前面; - 结果为正数时,
$b排在$a前面; - 结果为0时,两者相对顺序保持不变。
- 结果为负数时,
运行后的结果
执行代码后,你会得到完全符合预期的排序结果:
Array ( [0] => Array ( [0] => 1 [1] => orange ) [1] => Array ( [0] => 2 [1] => apple ) [2] => Array ( [0] => 3 [1] => kiwi ) [3] => Array ( [0] => 4 [1] => banana ) )
兼容低版本PHP的写法
如果你的PHP版本低于5.3(不支持匿名函数),可以单独定义比较函数再传入:
function compareSubArrays($a, $b) { return $a[0] - $b[0]; } usort($fruits, 'compareSubArrays');
拓展:降序排序
如果需要按子数组第0个元素降序排列,只需要把回调里的计算逻辑反过来:
usort($fruits, function($a, $b) { return $b[0] - $a[0]; });
内容的提问来源于stack exchange,提问作者jotalanusse
相关产品推荐
相关产品推荐

