PHP 中的 Usort 多维数组对我不起作用
Usort multidimensional array in PHP isn't working for me
直接使用文档中的示例,我看不出为什么会得到这样的结果。
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 的目的是根据多维数组中的值进行组织。有时它对其进行排序,有时它只是给出一个随机顺序作为输出数组。我错过了什么吗?另外,这不是重复的问题,请仔细阅读本网站上没有类似的问题。
在您的示例中,您使用函数 strcmp 来比较 整数 ,但此函数用于比较 二进制安全字符串 。您需要使用另一个函数或仅使用像 >
这样的运算符。因此,您的数组已按 PHP.
正确排序
直接使用文档中的示例,我看不出为什么会得到这样的结果。
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 的目的是根据多维数组中的值进行组织。有时它对其进行排序,有时它只是给出一个随机顺序作为输出数组。我错过了什么吗?另外,这不是重复的问题,请仔细阅读本网站上没有类似的问题。
在您的示例中,您使用函数 strcmp 来比较 整数 ,但此函数用于比较 二进制安全字符串 。您需要使用另一个函数或仅使用像 >
这样的运算符。因此,您的数组已按 PHP.