基于子数组第三个元素对多维数组升序排序的技术需求
按子数组第三个元素升序排序多维数组
嘿,针对你这个PHP多维数组排序的需求,直接用usort()函数配合自定义比较逻辑就能轻松搞定,毕竟它就是用来处理这种自定义规则排序场景的。
完整可运行代码
// 补全你给出的示例数组(假设截断部分为同类字符串格式) $targetArray = [ [30, 'AbdulA', 'TEST White Truck 7 am 9:30 am 12 pm 2:30 pm', 8, 12], [31, 'AbdulAnn', 'TEST White Truck 7 am 9:30 am 12 pm 2:30 pm', 2, 8], [32, 'pacha', 'TEST Red Van 8 am 10:30 am 1 pm 3:30 pm', 5, 10] ]; // 核心排序逻辑:按子数组的第三个元素(索引为2)升序排列 usort($targetArray, function($subArrA, $subArrB) { // 你的第三个元素是字符串,用strcmp做字典序比较 return strcmp($subArrA[2], $subArrB[2]); }); // 输出验证排序结果 print_r($targetArray);
代码细节说明
usort():PHP内置的用户自定义排序函数,会直接修改原数组(如果需要保留原数组,记得先复制一份:$sortedArray = $targetArray;再操作副本)。- 匿名比较函数:每次取两个子数组对比,因为PHP数组从0开始索引,所以第三个元素对应索引
2:- 若第三个元素是字符串,
strcmp()是最优选择,它会按字典序比较,返回负数则$subArrA在前,正数则$subArrB在前,0则顺序不变。 - 若第三个元素是数字,直接用
return $subArrA[2] - $subArrB[2];实现升序,反过来就是降序。
- 若第三个元素是字符串,
容错处理(可选)
如果你的多维数组里可能存在子数组长度不足3的情况,为避免Undefined offset错误,可以加兜底判断,把缺失第三个元素的子数组放到排序结果末尾:
usort($targetArray, function($subArrA, $subArrB) { $valA = isset($subArrA[2]) ? $subArrA[2] : ''; $valB = isset($subArrB[2]) ? $subArrB[2] : ''; return strcmp($valA, $valB); });
内容的提问来源于stack exchange,提问作者haidar
相关产品推荐
相关产品推荐

