2011-12-17 23 views
-1
Array 
(
    [data] => Array 
     (
      [0] => Array 
       (
        [name] => Nicki Escudero 
        [id] => 27700035 
       ) 

      [1] => Array 
       (
        [name] => Yorgo Nestoridis 
        [id] => 504571368 
       ) 
     ) 
) 

この多次元配列を名前で並べ替えるにはどうすればよいですか?多次元配列の並べ替え

私はarray_multisortで試しましたが、動作しません。

+2

可能重複(http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php) – Ryan

答えて

0

あなたがarray_multisortを使用する場合は、以下を使用します。

$array = array(
    'data' => array(
     array(
      'name' => 'Yorgo Nestoridis', 
      'id' => 504571368, 
     ), 
     array(
      'name' => 'Nicki Escudero', 
      'id' => 27700035, 
     ), 
    ), 
); 

$names = array(); 
foreach($array['data'] as $datum) { 
    $names[] = $datum['name']; 
} 

array_multisort($names, SORT_ASC, $array['data']); 
var_dump($array); // now sorted by name 

他に選択肢がカスタムを使用することです比較関数:[PHPで連想配列をソート]の

function compareNames($a, $b) { 
    return strcmp($a['name'], $b['name']); 
} 

usort($array['data'], 'compareNames'); 
0

既にソートされています:-)ソートするものは何ですか?そして、データはどこから来ていますか? DBから取得する場合は、別の方法でソートする必要があります。

+0

Iから変換午前jsonから配列へ。 –

+0

JSONのソースは何ですか? JSONが生成される前にソートを変更することはできませんか?より効率的です.. – Richard

+0

いいえ、json_decode関数を使って配列に変換されました。 –

0

これらの値が唯一の2つの値の場合は、idを配列のインデックスにして名前を値にすることができます。 asortを使用すると、名前で配列をソートし、インデックスと値の関係を維持することができます。

idをインデックスにすると、$array[27700035]Nicki Escuderoを返します。

// Copy the array to a new array. 
foreach($array as $val) { 
    $newArray[$val['id']] = $val['name']; 
} 

asort($newArray); 

編集:私は、マニュアルを経てきたし、あなたはまた、カスタム比較関数でusortを使用することができます。私はこれを使ったことがないと非常に少ない助けになることができますが... PHP usort

関連する問題