Mehrdimensionale Array auslesen
Randolf Gaßner
- php
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
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
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
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']} => {$_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 => {$_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