the-FoX: brauche mal hilfe bei arrays

hallo,

ich sitze grade mal wieder über meinem content management system, das ich mir schreib.
jetzt wollte ich mir ein array aufbauen und das mit den werten der menü-einträge füllen (id, menutext, parent-id)
also ein mehrdiminsionales array:
menu[0]["id"]=$id
menu[0]["text"]=$text
menu[0]["parent"]=$parent

um schneller drauf zu greifen zu können (da ich ja immer nur anhand der ids eines eintargs drauf zu greife), dachte ich mir, ich mach statt einer fortlaufenden nummer im ersten array einfach die id als index..und zwar nciht als zahl, sondenr als string:

menu["$id"]["id"]=$id
menu["$id"]["text"]=$text
menu["$id"]["parent"]=$parent

jetz wollte ich gerne alle einträge durchgehen und diese in einem file-specihern.
also dachte ich mir, ich mach eine for-schleife von
$i=0 bis $i<count($menu)

fwrite($fp,$menu[$i]);

count() liefert die richtige anzahl zurück, nur... da die
ids nicht fortlaufend sind/sein müssen, fehlen ein paar dazwischen und im array existieren zum beispiel folgende ids:
"1"
"3"
"5"

count() liefert drei zurück. und in der forschleife wird dann daraus:
menu[1]
menu[2]
menu[3]

mmh..genau dass will ich ja nicht, da die einträge 3 und 5 nicht gespeichert werden.

gibt es eine andere möglichkeit, den inhalt des arrays möglichst einfach und shcnell in ein file zu speichern ? hab ich ein denkfehler drin?!

ciao the-FoX

  1. hi

    arrays mit keys anstatt indizen, kannst am besten mit einen Foreach schleife anstatt einer for schleife bearbeiten:

    foreach($menu as $key => $value) {

    fwrite($fp,$value);

    }

    aber da du ein Mehrdemensionales Array hast wird er dir wohl nur öfers "array" in die Datei schreiben. deswegen:

    foreach($menu as $key => $value) {

    for($i = 0; $i < count($value); $i++)
      {
        fwrite($fp,$value[$i]);
      }

    }

    hab ich jetzt nur nicht ausprobiert, müsste aber eigentlich funktionieren. (wenn nicht ist es wenigstens der richtige ansatz :-))

    grüße aus HH

    1. Aloha!

      arrays mit keys anstatt indizen, kannst am besten mit einen Foreach schleife anstatt einer for schleife bearbeiten:

      foreach($menu as $key => $value) {

      fwrite($fp,$value);

      }

      Anstatt dass du mit

      foreach($menu as $key => $value)

      für jedes Element des Hashes ein $key/$value-Pärchen extrahierst, kannst du auch schlicht mit

      foreach ($menu as $key)

      den Inhalt der Schleife füe alle Schlüsselwerte des Hashes ausführen.

      Der Zugriff geht dann ganz banal:

      foreach ($menu as $key)
      {
        fputs($dateideskriptor, $menue[$key]["id"]);
        fputs($dateidesktiptor, $menue[$key]["text"]);
        fputs($dateidesktiptor, $menue[$key]["parent"]);
      }

      Dann muß man mit dem Value nämlich nicht rumhökern.

      - Sven Rautenberg

      1. danke euch beiden!!!:-)