PHP使用sort()函数对数组排序失败,输出仅为1问题咨询
问题原因
sort()是原地排序函数,会直接修改传入的数组本身,返回值仅为表示排序是否成功的布尔值:成功返回true,失败返回false。将返回值赋值后打印,布尔值true在PHP输出场景下会被自动转换为字符串"1",这是输出仅显示1的核心原因。- 就算直接打印排序后的原数组,
sort()默认按字符串字典序排序,不会提取每个元素#前的数字做数值排序,依然无法实现预期的排序效果。
解决方法
使用自定义排序函数 usort() 实现按指定规则排序,排序完成后直接打印原数组即可,示例代码如下:
<?php $data = '9#Saul,7#Jesse,1#Skyler,6#Walter'; $exp = explode(",",$data); // 自定义比较逻辑,提取#前的数值做升序比较 usort($exp, function($a, $b) { $numA = intval(explode('#', $a)[0]); $numB = intval(explode('#', $b)[0]); return $numA <=> $numB; }); print_r($exp); ?>
上述代码运行后输出结果符合预期:
Array ( [0] => 1#Skyler [1] => 6#Walter [2] => 7#Jesse [3] => 9#Saul )
内容的提问来源于stack exchange,提问作者Aqu Akhil
相关产品推荐
相关产品推荐

