Randolf Gaßner: Mehrdimensionale Array auslesen

Servus,

ich möchte folgendes Array auslesen:

$Kategorie = array(array(name => "messages",title => "Beiträge"),
array(name => "stat",title => "Statistiken"),
array(name => "accounts",title => "Mein Account"));

Ich jeweils paarweise die Werte für die Schlüssel name und title haben. Mit foreach, wenn ich mich nicht irre. Aber irgendwie komme ich mit dem Beispielen, die ich dazu finde, nicht zurecht. Einen passenden Link wäre ich auch nicht abgeneigt.

Herzlichen Dank!
Randolf

  1. Hallo Randolf!

    $Kategorie = array(array(name => "messages",title => "Beiträge"),
    array(name => "stat",title => "Statistiken"),
    array(name => "accounts",title => "Mein Account"));

    Ich jeweils paarweise die Werte für die Schlüssel name und title haben. Mit foreach, wenn ich mich nicht irre.

    Da irrst Du nicht.
    Probiers mal mit folgendem, vielleicht klappts ja dann:
    echo('<ul>');
    foreach ($Kategorie as $key => $value) {
        echo('<li>Name: '.$value['name'].'<br />Title: '.$value['title'].'</li>');
    }
    echo('</ul>');

    Das sollte eigentlich 3 Listenpunkte mit den Kategorien ausgeben.

    MfG
    Götz

    --
    Losung für Donnerstag, 25. November 2004
    Herr, du bist doch unser Vater! Wir sind Ton, du bist unser Töpfer, und wir alle sind deiner Hände Werk. (Jesaja 64,7)
    Dein Wille geschehe wie im Himmel so auf Erden. (Matthäus 6,10)
    (Losungslink)
    1. Hallo Götz,

      vielen Dank für deine Antwort. Ist genau das, was mir vorschwebte. Erscheint auch irgendwie logisch - wenn man es einmal gezeigt bekommt:-)

      Tschau
      Randolf

  2. Hello,

    nur so als Anregung:
    Du kannst das Array auch als Spaltenarray aufbauen, was dann allerdings speziell von Dir geschriebene  Funktionen für (Select,) Insert, Update, Delete von "Datensätzen" erfordert, aber es ermöglicht, nach jeder Spalte zu sortieren _und_ diese Sortierungen gleichzeitig aufrecht zu erhalten.

    $_kategorie = array();
    $_kategorie['name'][1] = 'messages';
    $_kategorie['title'][1] = 'Beiträge';

    $_kategorie['name'][2] = 'stat';
    $_kategorie['title'][2] = 'Statistiken';

    $_kategorie['name'][3] = 'accounts';
    $_kategorie['title'][3] = 'Mein Account';

    Und wenn Du jetzt

    asort($_kategorie['name']);
      asort($_kategorie['title']);

    durchführst, dann sind beide Spalten sortiert, die Schlüssel-Value-Beziehungen bleiben aber erhalten.

    Du kannst dann mit

    foreach($_kategorie[$sortspalte] as $key => $val)
      {
        echo "<p>{$_kategorie['name']['key']} =&gt; {$_kategorie['title']['key']}</p>";
      }

    das Array ausgeben.

    Hier wurde schon mel die Frage gestellt, wieso ich nicht

    foreach($_kategorie[$sortspalte] as $key => $val)
      {
        echo "<p>$val =&gt; {$_kategorie['title']['key']}</p>";
      }

    schreiben würde. Antwort: es handelt sich um ein Besipiel, das eine universell nutzbare Funktion andeuten soll, und keinen proprietären Code für nur einen Anwendungsfall.

    Der Aufbau als Spaltenarray ,hat Vorteile für die Sortierung, die Suche, und den Speicherbedarf.
    Insbesondere beim geringeren Speicherbedarf macht sich das bei langen Spaltennamen durch die entfernte Redundanz ganz stark bemerkbar.

    Die Funktionen für Select, Insert, Update und Delete lassen sich als allgemeingültige Funktionen aufbauen, sodass sie nur in der Form

    $ok = delete($_array, $record_no);
     $ok = update($_array, $_record, $record_no);
     $ok = insert($_array, $_record[, $record_no]);

    auftreten müssen und für _alle_ Spaltendefinitionen universell einsetzbar sind.

    Je nachdem, wie es gewünscht wird, kann das Satzformat von $_array und $_record überprüft werden oder stillschweigend ergänzt/gekürzt werden, wenn ein Feld im Zeilenarray $_record fehlt oder zuviel ist, da ja die namen mit übergeben werden.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau