2012-04-11 168 views
0

可能重複:
Sorting an associative array in PHP
Sorting a multidimensional array in PHP?排序與PHP多維數組

我有我有帶(子數組與數組排序...一些困難)類別和項目,但我無法對它們進行排序...

該陣列通常如下所示:

array 
    'Professional Services Applications' => 
    array 
     'Specialized Technologies' => 
     array 
      'Test Michiel, part 2' => 
      array 
       0 => string '2071' (length=4) 
     'JAVA' => 
     array 
      'Senior Apple Engineer' => 
      array 
       0 => string '2067' (length=4) 
      'Junior Apple Engineer' => 
      array 
       0 => string '2069' (length=4) 
     'Microsoft' => 
     array 
      'Senior ECM Consultant' => 
      array 
       0 => string '2059' (length=4) 
      'Junior ECM Consultant' => 
      array 
       0 => string '2082' (length=4) 
    'Business Applications' => 
    array 
     '' => 
     array 
      'Business Analyst' => 
      array 
       0 => string '2053' (length=4) 
      'Test business dingen ' => 
      array 
       0 => string '2062' (length=4) 
    'acADDemICT' => 
    array 
     '' => 
     array 
      'Test Michiel 

爲了把事情說清楚,
的類別是:專業服務應用業務應用acADDemICT
的子類別是:專業技術JAVA微軟 (有的沒有一個子類別!)

通過這個數組與此PHP代碼迴路我:

foreach ($job_list as $category => $subcategory) { 
    $page .= '<h2>' . $category .'</h2>'; 

    foreach ($subcategory as $name => $values) { 
     if (!empty($name)) { 
     $page .= '<h3>' . $name . '</h3>'; 
     } 

     foreach ($values as $vacancy => $link) { 
     $page .= '<li>' . l("$vacancy", "node/$link[0]") . '</li>'; 
     } 
    } 
} 

我已經嘗試了各種不同類型的排序功能(sort()asort()ksort(),...),但我並沒有與肺心病結束直接結果。

我的目標的一個字母順序的類別,子類別和項目...

所以,我的理想的結果應該是這樣的:

**aCCademICT:** 
    - Test Michiel 
**Business Applications:** 
    - Business Analyst 
    - Test business 
**Professional Services Applications:** 
    *JAVA* 
    - Junior Apple Engineer 
    - Senior Apple Enineer 
    *Microsoft* 
    - Junior ECM Consultant 
    - Senior ECM Consultant  
    *Specialize Technologies* 
    - Test Michiel, part 2 

UPDATE:
這裏我print_r

Array ([Professional Services Applications] => Array ([Specialized Technologies] => Array ([Test van Michiel, part 2 ] => Array ([0] => 2071)) [JAVA] => Array ([Senior Apple Engineer ] => Array ([0] => 2067)) [Microsoft] => Array ([Junior ECM Consultant ] => Array ([0] => 2059) [Senior ECM Consultant] => Array ([0] => 2087))) [acADDemICT] => Array ([] => Array ([Test van Michiel ] => Array ([0] => 2063))) [Business Applications] => Array ([] => Array ([Business Analyst ] => Array ([0] => 2053) [Test business dingen ] => Array ([0] => 2062)))) 
+0

發佈你的數組的'print_r',然後有人可以採取這一點,並在解決方案上工作。 – 2012-04-11 10:16:09

+0

你在我的問題中看到的第一個代碼塊是我的數組的var_dump。這應該不夠嗎? – Michiel 2012-04-11 10:22:57

+0

我只希望你的數組...不是所有關於該數組的每個元素的信息,例如類型,長度等。我可以選擇並努力尋找解決方案。而不是'var_dump',我問'print_r' – 2012-04-11 10:30:40

回答

1

你應該寫一個遞歸functi在那裏遍歷每個數組,如果元素本身是一個數組,則對它進行排序,然後對原始數組進行排序。

僞代碼:

function mysort($array) { 
    foreach ($array as $key=>$value) { 
    if (is_array($value)) $array[$key] = mysort($value); 
    } 
    sort($array); 
    return $array; 
} 
+0

經過一番檢查,你可能想檢查出函數array_multisort()http://se.php.net/manual/en/function.array-multisort.php – Cray 2012-04-11 10:04:05

1

當你有三個層次鍵來進行排序,你有點要申請ksort到多維數組的所有二維層次:

$array = array(
    'Category Z' => array(
     'Category Z - Z' => array(
      'Category Z - Z - Z' => array('2701'), 
      'Category Z - Z - X' => array('2601'), 
     ) 
    ), 
    'Category A' => array(
     'Category A - A' => array(
      'Category A - A - A' => array('2200'), 
     ) 
    ), 
); 

$ksort = function($array) use (&$ksort) { 
    if (!is_array($array)) return $array; 
    ksort($array); 
    return array_map($ksort, $array); 
}; 

$array = $ksort($array); 

print_r($array); 

輸出:

Array 
(
    [Category A] => Array 
     (
      [Category A - A] => Array 
       (
        [Category A - A - A] => Array 
         (
          [0] => 2200 
         ) 

       ) 

     ) 

    [Category Z] => Array 
     (
      [Category Z - Z] => Array 
       (
        [Category Z - Z - X] => Array 
         (
          [0] => 2601 
         ) 

        [Category Z - Z - Z] => Array 
         (
          [0] => 2701 
         ) 

       ) 

     ) 

) 
+0

謝謝你的努力,但據我所知,這個函數不是正在做我正在瞄準的東西...它正在刪除一些值,我不確定''function'語句在第一個'array_map'中做了什麼。 – Michiel 2012-04-11 10:53:03

+0

@Michiel:的確,這個函數有一個小問題。我也刪除了'array_map'的函數語句,因爲如果你有不同級別的子類別,第一個例子將無法工作。 – hakre 2012-04-11 11:34:03