PHP-Arrays zweispaltig anzeigen (foreach/section)

08. November 2008
Ziel war es, nicht einfach nur die Titel der Artikel untereinander zu schreiben, sondern per float:left zwei Spalten (divs) erzeugen, die dann den jeweiligen Inhalt aufnehmen. Der Inhalt kommt wieder aus einer Datenbank und wird in ein zwei-dimensionales PHP-Array eingelesen.
In der Funktion, die den Datenbankzugriff erledigt, wird das Array wie folgt erzeugt:
 
/* erzeugen des Arrays */

    ...
    $articles = array();
    while( $row = $db->fetch( $res ))
    {
        $row['title'] = urldecode( $row['title']);
        $db_year = $row['year'];

        $articles[$db_year]['year'] = $db_year;
        $articles[$db_year]['list'][] = $row;
    }
    ...
 
Das erzeugte Array hat dabei in etwa folgende Struktur:
 
/* Beispiel-Dump des PHP-Arrays */

Array
(
[2008] => Array
        (
            [year] => 2008
            [list] => Array
                (
                    [0] => Array
                        (
                            [id]     => 10
                            [title]  => Zehnter Artikel
                            [date]   => 2008-11-02
                            [comnts] => 10
                        )

                    [1] => Array
                        (
                            [id]     => 9
                            [title]  => Neunter Artikel
                            [date]   => 2008-10-12
                            [comnts] => 0
                        )

        ...
          )

[2007] => Array
        (
            [year] => 2007
            [list] => Array
                (
                    [0] => Array
                        (
                            [id]     => 12
                            [title]  => Zwölfter Artikel
                            [date]   => 2007-12-01
                            [comnts] => 2
                        )
                ...
         )
)
 
Das fertige Array wird dann vom PHP-Skript an das Template übergeben (per assign) und dort mittels foreach und section verarbeitet. Nachfolgend wird das Template skizziert:
 
{* Template verarbeitet das Titel-Array *}

{* -- ist das Array überhaupt definiert und gefüllt? -- *}
{if isset($summary_list) && $summary_list|@count > 0}
    {foreach key=index item=summary from=$summary_list}
        {* -- das Jahr ausgeben -- *}
        <div>{$summary.year}</div>
        <div>
            {* -- erste Titelspalte -- *}
            <div style="width: 46%; float: left">
                {section name=n start=0 loop=$summary.list step=2}
                    <div>{$summary.list[n].title}</div>
                {/section}
            </div>
            {* -- zweite Titelspalte -- *}
            <div style="width: 46%; float: left">
                {section name=m start=1 loop=$summary.list step=2}
                    <div>{$summary.list[m].title}</div>
                {/section}
            </div>
            <div style="clear: left">
        </div>
    {/foreach}
{/if}
 
Mittels der foreach-Schleife durchlaufen wir die Jahreszahlen (year). Die inneren section-Abschnitte iterieren über dem Array list. Dabei beginnt der erste Abschnitt bei Schritt 0 und der zweite Abschnitt bei Schritt 1. Die Schrittweite beträgt jeweils 2, so dass in der linken Spalte die Array-Elemente mit geraden Indizes und in der rechten Spalte diejenigen mit ungeraden Indizes angezeigt werden.
 
Es wurde noch kein Kommentar abgegeben. Bist Du der Erste?
HILFE
Code-Beispiele werden mit den BBCodes [code][/code] dargestellt. Jedes Tag muss eine Zeile für sich allein haben, d.h der Beispiel-Code muss wirklich ZWISCHEN den Tags stehen. Beispiel:
[code] ACHTUNG! HIER UMBRUCH WICHTIG. TAG [code] MUSS ALLEIN STEHEN
#include <stdio.h>

int main( void ){
    return 0;
} ACHTUNG! HIER UMBRUCH WICHTIG. NACHFOLGENDES TAG [/code] MUSS ALLEIN STEHEN
[/code]

Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
Dein Name *
Deine Email
Deine Website
Vorschau