2017-07-15 62 views
-5

直接从文档中使用示例,我看不出为什么我得到我的结果。PHP中的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 ("</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指基于多维数组内的值来组织。有时它会对它进行排序,有时它只是给出随机顺序作为输出数组。我错过了什么吗?此外,这是defo不是一个重复的问题,请仔细阅读,本网站上没有任何内容。

+0

_Am我错过了什么吗?是的,整数不是字符串,所以不要使用字符串比较函数。 – AbraCadaver

+0

总是假设你最初错了。这不是PHP的功能被破坏;在这种情况下,它是用户的逻辑。学习如何正确识别您正在使用的类型和操作。您将数字作为字符串进行比较,PHP将适当地对这些字符串进行排序。 –

回答

0

在你的榜样,你正在使用的功能strcmp比较整数,不过这个功能是由比较二进制字符串安全。您需要使用另一个功能或者只是像>这样的运营商。所以,您的数组已被PHP正确排序。