2013-05-16 51 views
3

我有一個數組需要按第三級排序。我需要按fullname值排序數組。這可能嗎?PHP Sort Array By SubArray Value by the 3rd level

$array = array(
    'family1' => array(
     'family_data' => array(
      'fullname' => 'Samuel Smith', 
      '...' => '...' 
     ) 
    ), 
    'family2' => array(
     'family_data' => array(
      'fullname' => 'John Doe', 
      '...' => '...' 
     ) 
    ), 
    'family3' => array(
     'family_data' => array(
      'fullname' => 'Adrian Chan', 
      '...' => '...' 
     ) 
    ) 
); 

更容易閱讀:

Array 
(
    [family1] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Samuel Smith 
        [...] => ... 
       ) 

     ) 

    [family2] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => John Doe 
        [...] => ... 
       ) 

     ) 

    [family3] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Adrian Chan 
        [...] => ... 
       ) 

     ) 

) 

期望的結果將是:

Array 
(
    [family3] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Adrian Chan 
        [...] => ... 
       ) 

     ) 

    [family2] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => John Doe 
        [...] => ... 
       ) 

     ) 

    [family1] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Samuel Smith 
        [...] => ... 
       ) 

     ) 

) 
+0

(代碼你最近編輯之前會比較好,因爲我們可以將它複製並粘貼到我們的編輯器測試(我做了哪個)。) – Dogbert

+0

stackoverflow.com/questions/15062210/how-do-i-sort-the-follwing-array –

+0

@Dogbert謝謝,我會記住下次 –

回答

3

使用uasort

uasort - 按與用戶定義的比較函數的陣列並保持索引相關ciation

uasort($array, function($a, $b) { 
    return strcmp($a['family_data']['fullname'], $b['family_data']['fullname']); 
}); 

測試:

$array = array(
    'family1' => array(
     'family_data' => array(
      'fullname' => 'Ben Smith', 
      '...' => '...', 
      '...' => '...' 
     ), 
     '...' => '...', 
     '...' => '...' 
    ), 
    'family2' => array(
     'family_data' => array(
      'fullname' => 'John Doe', 
      '...' => '...', 
      '...' => '...' 
     ), 
     '...' => '...', 
     '...' => '...' 
    ), 
    'family3' => array(
     'family_data' => array(
      'fullname' => 'Aen Smith', 
      '...' => '...', 
      '...' => '...' 
     ), 
     '...' => '...', 
     '...' => '...' 
    ), 
); 

uasort($array, function($a, $b) { 
    return strcmp($a['family_data']['fullname'], $b['family_data']['fullname']); 
}); 

print_r($array); 

輸出:

Array 
(
    [family3] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Aen Smith 
        [...] => ... 
       ) 

      [...] => ... 
     ) 

    [family1] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => Ben Smith 
        [...] => ... 
       ) 

      [...] => ... 
     ) 

    [family2] => Array 
     (
      [family_data] => Array 
       (
        [fullname] => John Doe 
        [...] => ... 
       ) 

      [...] => ... 
     ) 

) 
1

試試這個:

$sort = array(); 
foreach($your_array as $k=>$v) { 
    $sort['fullname'][$k] = $v['family_data']['fullname']; 
} 

array_multisort($sort['fullname'], SORT_ASC, $your_array); 


echo "<pre>"; 
print_r($your_array);