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

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

如何使用名稱對此多維數組進行排序?我試過array_multisort但它不起作用。PHP - 對多維數組進行排序

+2

可能重複的[排序在PHP關聯數組](http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php) – Ryan 2011-12-17 16:04:46

回答

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 

另一個選擇是使用自定義比較函數:的

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

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

它已經排序:-)你想排序?數據來自哪裏?如果你從數據庫中得到它,你應該排序不同。

+0

我是從變換json數組。 – 2011-12-17 16:12:38

+0

JSON的來源是什麼?在生成JSON之前,您不能更改排序嗎?更高效.. – Richard 2011-12-17 16:13:58

+0

不使用json_decode函數將其轉換爲數組 – 2011-12-17 16:23:10

0

如果這些只是您擁有的兩個值,那麼您可以嘗試使數組的索引爲id,並且名稱可以是該值。然後,您可以使用asort按名稱對數組進行排序並保持索引值關係。我的意思是$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