如何对多维数组按packagenumber值升序排序?已尝试uasort未成功
解决PHP多维数组按
packagenumber升序排序的问题 你在使用uasort时犯了一个容易忽略的小错误——回调函数里错误引用了外层的$data数组,而不是比较传入的$a和$b元素!这就是排序没生效的核心原因。
正确的实现方式
根据packagenumber的类型,推荐两种适配的写法:
1. 如果packagenumber是字符串类型(比如带前缀的编号,如"PKG-001")
用strcmp来做字符串比较:
uasort($data, function($a, $b) { // 重点:比较当前两个元素的packagenumber,而非外层数组 return strcmp($a['packagenumber'], $b['packagenumber']); });
2. 如果packagenumber是数字类型(比如纯整数1、2、3)
直接用减法更高效,返回结果会自动适配uasort的回调规则(负数/0/正数分别对应$a在前/相等/$b在前):
uasort($data, function($a, $b) { return $a['packagenumber'] - $b['packagenumber']; });
为什么你的代码没生效?
你之前的回调写的是strcmp($data['packagenumber'], $data['packagenumber']),这相当于一直在比较同一个固定值,返回结果永远是0,数组自然不会被重新排序。uasort的回调逻辑是逐个取出数组里的元素对($a和$b),你需要针对这两个元素的packagenumber做比较才行。
验证排序结果
排序完成后,可以用print_r($data)或者var_dump($data)输出数组,确认是否已经按packagenumber升序排列。
内容的提问来源于stack exchange,提问作者Takami
相关产品推荐
相关产品推荐

