Ralf Rapude: auf assoziatives Array zugreifen

Hallo Forum,
aus einer Textfile, die ich über file einlese, habe ich ein assoziatives Array gebaut. Das passiert über folgende Funktion:

function parse($data)
 {
 $items = array();

for($i=0;$i<count($data);$i++)
  {
   $data[$i] = str_replace("firm.","",$data[$i]);
   list($name,$val) = split("=",$data[$i]);
  $items[$name] = $val;
  }

return $items;
 }

Das klappt auch wunderbar, denn wenn ich über:

$ausgabe=parse($data);
  while (list($key, $val) = each($ausgabe)) {
  echo "$key => $val<br>";
}

auf die file zugreife, werden mir alle Werte schön säuberlich ausgegeben. Das sieht den z.B. so aus:

fax=>"03428/23423";

Was aber nicht funzt, ist wenn ich direkt über den Key auf das Array zugreifen möchte, also z.B.

print $ausgabe["fax"];

Kann mir jemand sagen wieso? Denn das Array gibt doch bei der while Schleife ganau diese Werte aus. Müßte doch also eigentlich funzen, oder?

Vielen Dank und Gruß
Ralf

  1. Hi,

    Kann mir jemand sagen wieso?

    bist Du sicher, daß der Key "fax" heißt, und nicht z.B. " fax" oder "fax "? Oder gar "
    fax"?

    Cheatah

    1. Hallo Cheetah,
      Dank für den Tip.Habs gerade mal probiert mit

      echo "*".$key."*". "=>". $val."<br>";

      in der Ausgabe erscheint dann tatsächlich

      *fax *=>043...

      Deshalb habe ich folgendes gemacht:

      $key=str_replace(" ","",$key);

      jetzt erscheint wie gewünscht:

      *fax*=>043...

      Auf $ausgabe["fax"] kann ich aber immer noch nicht zugreifen. Gibt es Zeichen, die vielleicht auf diesem Weg gar nicht sichtbar sind? Da ich zwei keys vergleichen muß, wäre es vielleicht besser, keinen genauen Vergleich zu machen, sondern nach einem Teilstring zu suchen. Aber ich wüßte schon gern, woran es liegt, denn ich finde keinen Fehler.

      Gruß Ralf

      1. Hi,

        in der Ausgabe erscheint dann tatsächlich

        in der Ausgabe, oder im Quelltext der Ausgabe?

        jetzt erscheint wie gewünscht:

        Laß Dir doch mal testweise die Länge von $key mit ausgeben.

        Cheatah

        1. Hiho,
          ich werd weich!
          strlen gibt die richtige Länge an. Bei spk z.B. 3. Müßte doch denn hinhauen mit $ausgabe["spk"]. Ist mir völlig rätselhaft. Ich werds mal mit dem Vergleich von Teilstrings versuchen, wenn nicht noch irgendjemandem was geniales einfällt.

          Trotzdem Dank
          Gruß Ralf

          1. Hi,
            habs endlich rausgekriegt. Das Problem entsteht anscheinend schon beim Schreiben der Datei. Wenn ich sie so:

            fwrite($write,"$key=$val\n");

            schreibe, kann ich auch über z.B.

            print $ausgabe["fax"];

            Gruß Ralf

  2. High,

    bin mir nicht sicher, weil rookie, aber irgendwie stört mich das mit den Anführungszeichen. Bei der erzeugung des Keys in Assoziativen Arrays werden doch eigentlich immer Anführungszeichen benutzt. Deine Ausgabe von $key und $val zeigt bei fax keine Anführungszeichen und bei der Nummer schon.
    Ich würde mal versuchen in function parse() dem $key auch noch Anführungszeichen zu verpassen.

    Nur so ne Vermutung weil ich sonst auch nix gefunden hab.

    cu