【发布时间】:2017-07-15 23:54:02
【问题描述】:
直接使用文档中的示例,我无法弄清楚为什么我会得到我现在的结果。
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = 1000;
$fruits[1]["fruit"] = 600;
$fruits[2]["fruit"] = 2180;
echo ("<pre>");
echo " before \n";
print_r($fruits);
echo ("</pre>");
usort($fruits, "cmp");
echo ("<pre>");
echo " after \n";
print_r($fruits);
echo ("</pre>");
这些是结果:
before
Array
(
[0] => Array
(
[fruit] => 1000
)
[1] => Array
(
[fruit] => 600
)
[2] => Array
(
[fruit] => 2180
)
)
after
Array
(
[0] => Array
(
[fruit] => 1000
)
[1] => Array
(
[fruit] => 2180
)
[2] => Array
(
[fruit] => 600
)
)
我认为 usort 旨在根据多维数组中的值进行组织。有时它对它进行排序,有时它只是给出一个随机顺序作为输出数组。我错过了什么吗?另外,这不是一个重复的问题,请仔细阅读本网站上没有类似的内容。
【问题讨论】:
-
我错过了什么吗? 是的,整数不是字符串,所以不要使用字符串比较函数。
-
总是假设你一开始就错了。损坏的不是 PHP 的 usort 函数;在这种情况下,这是用户的逻辑。学习正确识别您正在使用的类型和操作。您将数字作为字符串进行比较,PHP 正在对这些字符串进行适当的排序。
标签: php multidimensional-array usort