• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Schleife mit mehrdimensionalen Arrays

blabla333

Mitglied
Ich habe eine Abfrage, welche ich weitergehend sortieren möchte. Dazu habe ich folgenden Ansatz:

PHP:
$kategorie4 = array();
$kategorie5 = array();
//und noch mehr Arrays
$sonstige = array();
$ergebnis = array();

while (have_posts()) : the_post();    
  // Variablen werden eingelesen - habe ich jetzt mal hier weggelassen   
  array_push($ergebnis, $kategorie, $titel, $link, $text);
  if ($kategorie == 5) { array_push($kategorie5, $ergebnis); }
  elseif ($kategorie == 4) { array_push($kategorie4, $ergebnis); }
  // und noch viel mehr elseif-Abfragen
  else { array_push($sonstige, $ergebnis); }
  $ergebnis = array();
endwhile;

Anschließend werden einzeln die Inhalte der Arrays entsprechend formatiert ausgegeben.

Ich denke, das kann man mit Sicherheit deutlich eleganter und einfacher machen (vor allem, weil es natürlich schlecht ist jede Kategorie per Hand anzulegen), allerdings geht mir das mit den mehrdimensionalen Arrays nicht so leicht von der Hand. Im Prinzip ist es so, dass bei der Abfrage immer die $kategorie (ID) abgefragt wird. Es soll ein Array erstellt werden, der alle Ergebnisse mit der gleichen Kategorie beinhaltet. Alleine hier kann man doch die Arrays sicher auch schon so gestalten, dass ich sie nicht per Hand erstellen muss ($kategorie4, $kategorie5, usw...). Ich meine die Arrays heißen ja schon so, wie die Kategorie-ID lautet... ($sonstige könnte man auch $kategorie0 nennen).
Also im Grunde soll einfach jeder Post in den passenden Kategorie-Array gepackt werden.

Hiernach soll ein Gesamtarray ($ausgabe) erstellt werden, welchem jedem Kategorie-Array noch einen Titel und eine Kurzform zuweist (das muss wohl per Hand einmalig angelegt werden). Abschließend wird dieser Gesamtarray entsprechend formatiert ausgegeben. Oder man legt vorher per Hand einen Array mit den Titeln und Kurzformen an und verbindet dies dann bei der Ausgabe mit den Kategorien-Array. Weiß nicht, was sinnvoller und einfacher ist.

Kurz zusammengefasst: Jeder Post der Schleife soll einer Kategorie zugeordnet werden und anschließend soll die gesamte Ausgabe dann so erfolgen, dass zunächst der Titel und die Kurzform der Kategorie als Überschrift ausgegeben wird und dann entsprechend der zugehörige Inhalt bzw. die Posts dieser Kategorie aufgeführt werden.

Möglicherweise sagt auch jemand, dass Arrays für diesen Zweck zu kompliziert sind...
 
Klingt, als ginge das einfacher. Kannst du mal ganz kurz beschreiben, in welcher (bzw. welchen) Variable die Ausgangsdaten stehen, wie die strukturiert sind, wonach die sortiert werden sollen und in welcher Variable die landen sollen? Deinem Text nach hätte ich die letzte Teilfrage mit $ausgabe beantwortet. Laut deinem Quellcode eher mit $ergebnis. Alle anderen Teilfragen: keine Spur ...
Gruß!
Bodil
 
Bzw. meinst du sowas?
PHP:
$categories = array();
foreach($posts as $post) {
    $categories[$post['kategorie']][] = $post;
}
oder etwas übersichtlicher
PHP:
$categories = array();
foreach($posts as $post) {
    $category = $post['kategorie'];
    // hier könnte $category den Wert 'sonstiges' zugewiesen bekommen, z.B. wenn $category keine Zahl ist.
    $categories[$category][] = $post;
}
php.net empfiehlt übrigens generell die Schreibweise $array[] = $var der Schreibweise array_push($array, $var); vorzuziehen.
PHP: array_push - Manual
 
Zurück
Oben