【发布时间】:2020-10-26 18:31:02
【问题描述】:
我正在使用usort 根据sales 键值上的数字对数组进行排序。这就是我所拥有的:
更正:14 不是问题,而是 9 以上。
$arr = array(
"a" => array("sales" => 4),
"b" => array("sales" => 3),
"c" => array("sales" => 2),
"d" => array("sales" => 3),
"e" => array("sales" => 4),
"f" => array("sales" => 14),
"g" => array("sales" => 1)
);
$reverse_arr = $arr;
usort($reverse_arr, 'cmp');
print_r( $reverse_arr );
function cmp($a, $b) {
return strcmp($a['sales'], $b['sales']);
}
排序对大部分部分都有效,但只有当值为14 时,它才会表现得奇怪。具有 14 个销售额的项目被放置在不应该放置的位置。这是输出:
Array
(
[0] => Array
(
[sales] => 1
)
[1] => Array
(
[sales] => 14
)
[2] => Array
(
[sales] => 2
)
[3] => Array
(
[sales] => 3
)
[4] => Array
(
[sales] => 3
)
[5] => Array
(
[sales] => 4
)
[6] => Array
(
[sales] => 4
)
)
知道为什么会发生这种情况以及如何解决这个问题吗?
【问题讨论】:
-
因为
strcmp比较的是字符串,而不是数字/整数。return $a['sales'] <=> $b['sales'];就够了。 -
@u_mulder 这样一个简单的解决方案,我对 PHP 函数不是很熟悉,并且从一个非常流行的 SO 线程中获得了整个代码,用于对数组元素进行排序。感谢您指出问题!
-
@u_mulder 请不要将答案发布为 cmets。在这种情况下,您实际上发布了比当前页面上的答案更好的答案,但由于您将其作为评论发布,因此无法正确投票或接受。
-
@DeepakKamat 也许您可以建议对您阅读代码的答案进行修改,以包括
<=>和cmp的示例,或者提及它们之间的区别。 -
请不要告诉我应该在哪里写什么)