2016-08-30 1 views
0

Ich habe folgendes Array erhalten, $cat_group_array:Wie Format Ausgabe von Multi-Dim Array

 
Array 
(
    [0] => Array 
     (
      [cat] => 01 
      [pgroup] => 0010 
      [pgroup_name] => STEAKS - STRIPLOINS 
     ) 

    [1] => Array 
     (
      [cat] => 01 
      [pgroup] => 0015 
      [pgroup_name] => STEAKS - RIBEYES 
     ) 

    [2] => Array 
     (
      [cat] => 01 
      [pgroup] => 0020 
      [pgroup_name] => STEAKS - T-BONE 
     ) 

    [3] => Array 
     (
      [cat] => 01 
      [pgroup] => 0025 
      [pgroup_name] => STEAKS - TENDERLOIN 
     ) 

    [4] => Array 
     (
      [cat] => 01 
      [pgroup] => 0030 
      [pgroup_name] => STEAKS - TOP SIRLOIN 
     ) 

    [5] => Array 
     (
      [cat] => 01 
      [pgroup] => 0035 
      [pgroup_name] => STEAKS - Other Varieties 
     ) 
    [6] => Array 
     (
      [cat] => 05 
      [pgroup] => 0145 
      [pgroup_name] => CHICKEN - Ground 
     ) 

    [7] => Array 
     (
      [cat] => 05 
      [pgroup] => 0150 
      [pgroup_name] => CHICKEN-BREADED 
     ) 

    [8] => Array 
     (
      [cat] => 05 
      [pgroup] => 0155 
      [pgroup_name] => CHICKEN BREASTS (Raw Products) 
     ) 
) 

Mein Ziel ist es, eine Ausgabe, so etwas zu bekommen, wo ich die Gruppen und Gruppennamen uner die Kategorie Überschrift angezeigt werden

 
Cat: 01 

0010 - Steaks - Striploin 
0015 - Steaks - Ribeyes 
0020 - Steaks - T-Bone 
0030 - Steaks - Top Sirloin 
0035 - Steaks - Other Varieties 

Cat: 05 

0145 - Chicken Ground 
0150 - Chicken Breaded 
0155 - Chicken Breasts 

Ich habe mehrere Dinge ausprobiert, nichts hat Früchte noch yelded. Ich habe so etwas versucht, aber ich bekomme keine Ausgabe.

foreach ($cat_group_array as $key => $row) {  
    $test = $cat_group_array[$key]['cat']; 
    echo "Category: " . $test; 
    while ($cat_group_array[$key]['cat'] == $test) { 
     echo "Pgroup #: " . $cat_group_array[$key]['pgroup'] . 
     " Group Name = " . $cat_group_array[$key]['pgroup_name'] . "<br /><br />";  
    } 
} 

Wenn mir jemand in die richtige Richtung zeigen könnte, würde es geschätzt werden.

+0

Welche PHP-Version läuft auf? – trincot

+0

Ich verwende Version 5.5.28. –

Antwort

0

Sie können dies auf verschiedene Arten tun. Ich werde eine Lösung bereitstellen, bei der das ursprüngliche Array nicht nach Kategorien sortiert werden muss. Es erstellt zuerst ein anderes Array, das nach dem Kategorienamen codiert ist und Sub-Arrays mit den dazugehörigen Zeilen enthält. Dann durchläuft es über diesen Kategorien und pro Kategorie iteriert über die Zeilen:

foreach ($cat_group_array as $row) { 
    $categories[$row["cat"]][] = $row; 
} 
foreach ($categories as $name => $groups) { 
    echo "\n<h3>Category: $name</h3>\n\n"; 
    foreach ($groups as $group) { 
     echo "<p>{$group['pgroup']} {$group['pgroup_name']}</p>\n"; 
    } 
} 

Sehen Sie es auf eval.in laufen.

+0

Das hat sehr gut funktioniert, vielen Dank. –

0

Da Sie die Kategorien im Voraus wissen müssen, können Sie sie einfach aus dem Array mit array_map extrahieren.

$categories = array_map(function($cat) { 
    return $cat['cat']; 
}, $cat_group_array); 

Da Sie nur über einzigartige Kategorien müssen wissen Sie array_unique auszusondern alle doppelten Kategorien verwenden können.

$categories = array_unique($categories); 

Jetzt können Sie die $categories Array als Filter verwenden, um das gewünschte Endergebnis mit array_filter zu bekommen.

foreach($categories as $category) { 
    $items = array_filter(function($item) use($category) { 
     return $item['cat'] === $category; 
    }, $cat_group_array); 

    echo "Cat: $category\n\n"; 

    foreach($items as $item) { 
     echo "$pgroup - $pgroup_name\n"; 
    } 
    echo "\n\n"; 
} 

Das Endergebnis sollte wie erwartet sein.

 
Cat: 01 

0010 - Steaks - Striploin 
0015 - Steaks - Ribeyes 
0020 - Steaks - T-Bone 
0030 - Steaks - Top Sirloin 
0035 - Steaks - Other Varieties 

Cat: 05 

0145 - Chicken Ground 
0150 - Chicken Breaded 
0155 - Chicken Breasts 
+0

Danke für deine Antwort, ich werde morgen damit spielen. Ich habe die obigen Vorschläge aus Trincot ausprobiert und es hat funktioniert, ich werde morgen Ihre Antwort geben und daran arbeiten, es zu verstehen. –