2013-04-09 168 views
0

我有一個簡單的多數組,如下所述,我需要通過其關鍵標籤(而不是鍵值)進行排序。PHP陣列排序鍵

array(
    1 => array(
     2 => array(); 
     11 => array(); 
     20 => array(); 
     31 => array(); 
     4 => array(); 
     43 => array(); 
     12 => array(); 
     3 => array(); 
    ); 
    2 => array(); 
    11 => array(); 
    20 => array(); 
    31 => array(); 
    4 => array(); 
    43 => array(); 
    12 => array(); 
    3 => array();); 

的問題是,我的順序是我回陣列排列,如:

1, 11, 12, 2, 20, 3, 31,等等 而不是1,2,3,4,11,12,等。

這是我的排序函數:

private function orderByKey(&$array) { 
     ksort($array); 
     foreach($array as $value) { 
      if (is_array($value)) { 
       $this->orderByKey($value); 
      } 
     } 
    } 

這裏可能有什麼問題?

謝謝。

回答

4

需要訪問$值作爲參考,以該條目中$陣列

private function orderByKey(&$array) { 
     ksort($array); 
     foreach($array as &$value) { 
      if (is_array($value)) { 
       $this->orderByKey($value); 
      } 
     } 
    } 
+0

這是事實問題,而不是引用我的$值。 – MGP 2013-04-09 13:26:43

1

爲即排序()和ksort()的第二個參數是sort_flags改變。當你希望它由數進行排序,而不是字符串值(因爲它目前的樣子),你必須設置該參數:

ksort($my_array, SORT_NUMERIC); 

退房的頁面排序(),其中不同類型的標誌解釋:http://www.php.net/manual/en/function.sort.php

+1

這不是問題,在這裏。這是一個參考/價值問題 – Uby 2013-04-09 13:25:50

0
ksort($myarray); 
foreach ($myarray as $key => $val) { 
    echo "$key = $val\n"; 
} 
1

下一頁不排序與子陣我也看了你的問題,你一定要在你在你的問題綱要(1, 11, 12, 2, 20, 3, 31, ...)的順序排序鍵的問題:

uksort($array, function($a, $b) { 
    return strcmp("$a ", "$b "); 
}); 

這類確實墊用空格每個鍵,使得圖3是大於20但小於30。

完整的代碼:

private function orderByKey(&$array) { 
    if (!is_array($array)) return; 
    uksort($array, function($a, $b) { 
     return strcmp("$a ", "$b "); 
    }); 
    array_walk($array, [$this, 'orderByKey']); 
} 

或者,如果ksort()工程給你:

private function orderByKey(&$array) { 
    if (!is_array($array)) return; 
    ksort($array);   
    array_walk($array, [$this, 'orderByKey']); 
} 
+0

空間沒有問題,我的文本是由某人編輯的,以提高可讀性。 ünyways,感謝清理「orderByKey」功能:) – MGP 2013-04-09 16:38:27