2012-04-11 23 views
0

Mögliche Duplizieren:
Sorting an associative array in PHP
Sorting a multidimensional array in PHP?Sortierung ein mehrdimensionales Array mit PHP

ich mit Sortierung ein Array einige Schwierigkeiten mit ... Ich habe eine Reihe bekam mit (sub) Kategorien und Elemente, aber ich sortiere sie nicht ...

Das Array sieht normalerweise so aus:

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 

Um die Dinge klar zu machen,
die Kategorien sind: Dienstleistungen Anwendungen, Business Applications und acADDemICT.
die Unterkategorien sind: Specialized, Technologies, JAVA und Microsoft (einige haben keine Subkategorie!)

I Schleife durch dieses Array mit diesem PHP-Code:

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>'; 
     } 
    } 
} 

Ich habe alle verschiedenen Arten von Sortierfunktion (sort(), asort(), ksort(), ...) versucht, aber ich endete nicht mit dem cor richtiges Ergebnis.

ich bin für die eine alphabetisch Reihenfolge der Kategorien, Unterkategorien und Produkte ...

Also mein ideales Ergebnis würde so aussehen Ziel:

**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:
Hier mein 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

Geben Sie ein 'print_r' von Ihrem Array, dann kann jemand das nehmen und an einer Lösung arbeiten. –

+0

Der erste Code-Block, den Sie in meiner Frage sehen, ist ein 'var_dump' meines Arrays. Sollte das nicht ausreichen? – Michiel

+0

Ich möchte nur Ihr Array ... nicht alle Informationen über jedes Element dieses Arrays, wie Typ, Länge usw.Das kann ich auswählen und auf eine Lösung hinarbeiten. Anstatt eines 'var_dump', frage ich' print_r' –

Antwort

1

Sie sollten eine rekursive functi schreiben Dabei durchläuft jedes Array und wenn das Element ein Array ist, sortiert es und sortiert dann das ursprüngliche Array.

Pseudocode:

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

Nach etwas Überprüfung, Sie Vielleicht möchten Sie die Funktion array_multisort() http://se.php.net/manual/en/function.array-multisort.php – Cray

1

Wie Sie drei Ebenen der Schlüssel sortiert werden müssen, haben Sie etwas ksort auf alle 2d-Ebenen des mehrdimensionales Array anwenden:

$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); 

Ausgang :

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

Vielen Dank für die Mühe, aber soweit ich sehen kann, ist diese Funktion nicht genau das zu tun, was ich anstrebte ... Es fallen einige Werte und ich bin nicht sicher, was die 'function' Anweisung in der ersten' array_map' tut. – Michiel

+0

@Michiel: In der Tat gab es ein kleines Problem mit der Funktion. Ich habe auch die Funktionsanweisung für 'array_map' entfernt, da das erste Beispiel bei unterschiedlichen Unterkategorien nicht funktioniert. – hakre