2017-07-15 5 views
-5

En utilisant l'exemple directement à partir des docs, je ne vois pas pourquoi je reçois les résultats que je suis.Usort tableau multidimensionnel en PHP ne fonctionne pas pour moi

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

Voici les résultats:

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 
    ) 

)

Je pensais que usort était destiné à organiser la base d'une valeur dans un tableau multidimensionnel. Parfois, il trie, parfois il donne juste un ordre aléatoire en tant que tableau de sortie. Est-ce que je manque quelque chose? Aussi, ce n'est pas une question en double, lisez-le attentivement il n'y a rien de tel sur ce site.

+0

_Qu'il me manque quelque chose? _ Oui, les entiers ne sont pas des chaînes, n'utilisez donc pas de fonction de comparaison de chaînes. – AbraCadaver

+0

Supposez toujours que vous avez initialement tort. Ce n'est pas la fonction usort de PHP qui est cassée; c'est la logique de l'utilisateur dans ce cas. Apprenez à identifier correctement les types et les opérations avec lesquels vous travaillez. Vous comparez les nombres en tant que chaînes et PHP trient ces chaînes de manière appropriée. –

Répondre

0

Dans votre exemple, vous utilisez la fonction strcmp pour comparer les entiers, mais cette fonction est faite pour comparer les données binaires chaînes. Vous devez utiliser une autre fonction ou simplement un opérateur comme >. Donc, votre tableau a été trié correctement par PHP.