2012-03-16 6 views
0

をusort使って配列に私がKEYキーでそれをソートしたい私が持っていると、アレイは、このカントのソート配列のキーに応じ

Array 
(
    [0] => Array 
     (
      [key] => 0 
      [val] => 0 
     ) 

    [1] => Array 
     (
      [key] => 11 
      [val] => 1:1 
     ) 

    [2] => Array 
     (
      [key] => 1100 
      [val] => 1:100 
     ) 

    [3] => Array 
     (
      [key] => 112 
      [val] => 1:12 
     ) 

    [4] => Array 
     (
      [key] => 1144 
      [val] => 1:144 
     ) 

    [5] => Array 
     (
      [key] => 1146 
      [val] => 1:146 
     ) 

    [6] => Array 
     (
      [key] => 116 
      [val] => 1:16 
     ) 

    [7] => Array 
     (
      [key] => 118 
      [val] => 1:18 
     ) 

    [8] => Array 
     (
      [key] => 120 
      [val] => 1:20 

のように見えます

私は、次のコード

 usort($arrScale,"cmd"); 

function cmp($a, $b) 
{ 
    if ($a["key"] == $b["key"]) { 
     return 0; 
    } 
    return ($a["key"] < $b["key"]) ? -1 : 1; 
} 
を使用

1100と1144は最後に近づくはずですか?私は何か間違っているのですか?

答えて

4

キー値は文字列で、文字列比較ルールでは「1144」は「116」よりも「小さい」です。比較のためintにキャストします。あなたの最初の配列ではなく、しますprint_r()のvar_dump(の

function cmp($a, $b) 
{ 
    $aKey = (int) $a["key"]; 
    $bKey = (int) $b["key"]; 

    if ($aKey == $bKey) { 
     return 0; 
    } 
    return ($aKey < $bKey) ? -1 : 1; 
} 
+0

はまだ働いていない、 – Roland

+1

を文字列にキーの値をキャストしようとした後、その後のvar_dumpであなたの質問を編集してくださいは、())に関する追加情報の多くを提供します配列。 PSでは、キー値をintにキャストする必要があります。 –

+0

問題は解決されました。すべてがint値に正しくキャストされました。問題はキーボードと椅子の間に存在していました。私はusortを走らせた($ arrScale、 'cmd'); usort($ arrScale、 'cmp')の代わりに。スペルミスを犯しました。笑 。とにかくこの問題を手伝ってくれてありがとう。感謝します! – Roland

関連する問題