PHP中的Usort多维数组isn';他不为我工作

PHP中的Usort多维数组isn';他不为我工作,php,multidimensional-array,usort,Php,Multidimensional Array,Usort,直接使用文档中的示例,我看不出为什么我会得到这样的结果 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 ("

直接使用文档中的示例,我看不出为什么我会得到这样的结果

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>");
)


我认为usort是基于多维数组中的值进行组织的。有时它对它进行排序,有时它只是给出一个随机顺序作为输出数组。我错过什么了吗?此外,这不是一个重复的问题,请仔细阅读此网站上没有类似的问题。

在您的示例中,您使用此函数比较整数,但此函数用于比较二进制安全字符串。您需要使用另一个函数或仅使用类似于
的运算符。因此,您的数组已通过PHP正确排序。

我是否遗漏了什么?是的,整数不是字符串,所以不要使用字符串比较函数。请始终假设您最初输入的是错误的。不是PHP的usort函数被破坏了;在这种情况下,这是用户的逻辑。学会正确识别您正在使用的类型和操作。您将数字作为字符串进行比较,PHP将对这些字符串进行适当排序。
 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
    )