PHP如何按二维数组每行首个子元素的text字段对数组排序
问题原因
usort()是原地排序函数,通过引用修改传入的原数组,返回值为布尔类型(排序成功返回true,失败返回false)。你直接将usort()的返回值赋值给$product_categories,把原数组直接覆盖成了布尔值true(打印时显示为1),这是print_r只输出1的核心原因。- 比较函数逻辑有误:外层数组的每个元素
$a、$b本身就是包含3个键值对的子数组,你需要取子数组中下标为0的元素的text字段做对比,原代码直接取$a['text']属于索引不存在的错误调用。
正确实现代码
通用版本(兼容所有PHP版本)
// 直接调用usort即可,不需要接收返回值,函数会原地修改数组 usort($product_categories, 'sortAlphabetically'); function sortAlphabetically($a, $b) { return strcmp($a[0]['text'], $b[0]['text']); } // 输出验证排序结果 print_r($product_categories);
PHP7.4+ 简化版本(箭头函数写法)
usort($product_categories, fn($a, $b) => strcmp($a[0]['text'], $b[0]['text'])); print_r($product_categories);
内容的提问来源于stack exchange,提问作者Steph3071
相关产品推荐
相关产品推荐

