2017-07-15 124 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正確排序。