2016-12-08 4 views
1

So habe ich ein Array wie folgt:Looping durch Ebene 2 des mehrdimensionalen Arrays

$arr = array(
    "element1" => array("group" => "g1", "other_stuff" => "foo"), 
    "element2" => array("group" => "g1", "other_stuff" => "bar"), 
    "element3" => array("group" => "g1", "other_stuff" => "foo"), 
    "element4" => array("group" => "g2", "other_stuff" => "bar"), 
    "element5" => array("group" => "g2", "other_stuff" => "foo"), 
    "element6" => array("group" => "g2", "other_stuff" => "bar"), 
    "element7" => array("group" => "g3", "other_stuff" => "foo"), 
    "element8" => array("group" => "g3", "other_stuff" => "bar"), 
    "element9" => array("group" => "g3", "other_stuff" => "foo"), 
); 

Ich möchte die Elemente innerhalb jeder Gruppe, gefolgt von der Gruppe, die Reihenfolge der in einer gemischten Reihenfolge anzuzeigen Gruppen werden auch gemischt. So zum Beispiel:

g2 
-> element5 
-> element4 
-> element6 
g3 
-> element7 
-> element9 
-> element8 
g1 
-> element2 
-> element3 
-> element1 

dachte ich, dass ich etwas in diese Richtung tun könnte:

shuffle($arr); 

foreach($arr[]["group"] as $current_group){ 
    echo "$current_group" 
    foreach($arr[][$current_group] as $current_element){ 
     echo "-> ".$ current_element."<br />" 
    } 
} 

Aber nein, $arr[]["group"] ist nicht gültig. Wie kann ich das erreichen?

Dank

(Es ist 02.00 Uhr, wo ich so Code meines Pseudo bin vielleicht uber gebrochen werden, sorry, ich will nur die Idee vermitteln, ich wurde nach)

Antwort

3

Gerade Gruppe sie zuerst den group-Wert. Verwenden, die als Schlüssel in einem neuen Container-Belegung:

$final_arr = array(); 
foreach($arr as $key => $a) { 
    $final_arr[$a['group']][] = $key; 
} 

Dies sollte die folgende Struktur ergeben:

Array 
(
    [g1] => Array 
     (
      [0] => element1 
      [1] => element2 
      [2] => element3 
     ) 

    [g2] => Array 
     (
      [0] => element4 
      [1] => element5 
      [2] => element6 
     ) 

    [g3] => Array 
     (
      [0] => element7 
      [1] => element8 
      [2] => element9 
     ) 

) 

Nun ist es an Ihnen, wie Sie präsentieren es (über nur einfache -> String oder mit HTML).

Schmutzige Beispiel:

echo '<ul>'; 
foreach($final_arr as $group => $f) { 
    echo '<li>', $group; 
    echo '<ul>'; foreach($f as $e) { echo "<li>{$e}</li>"; } echo '</ul>'; 
    echo '</li>'; 

} 
echo '</ul>'; 

Wenn Sie möchten, dass shuffle erhalten, bekommt nur die Schlüssel mischen und übertragen:

$keys = array_keys($arr); // get the keys of the original 
shuffle($keys); shuffle the keys 
$new_arr = array(); // initialize a temp container 
foreach($keys as $k) { 
    $new_arr[$k] = $arr[$k]; // match the shuffled key and assign it 
} 
$arr = $new_arr; // overwrite 
+0

Dank. Es funktioniert ohne 'shuffle ($ arr);' aber es geht nicht damit. –

+0

@fmalaussena 'shuffle' beseitigt die Tasten, deshalb funktioniert es nicht, wenn es damit verbunden ist – Ghost

Verwandte Themen