Falk: Arrays durchsuchen

Hallo,

wie kann ich ein mehrdimensionales Array nach einem bestimmten Wert durchsuchen?

Ich habe ein Array, z.B.
$array[0][0] enthält alle id's aus einer Tabellenspalte einer DB
$array[0][1] enthält Wörte aus einer anderen Spalte dieser Tab.

Die erste Klammer sind die Anzahl der gefundenen Datensätze.

Jetzt möchte ich nur die Array-Elemente mit einem bestimmten Wort z.B. Winter.

Ich habs mit array_search versucht, ohne Erfolg. Das hat nur geklappt wenn das Array eindimensional ist.

Was mach ich falsch?

Falk

  1. wie kann ich ein mehrdimensionales Array nach einem bestimmten Wert durchsuchen?

    Ich habe ein Array, z.B.
    $array[0][0] enthält alle id's aus einer Tabellenspalte einer DB
    $array[0][1] enthält Wörte aus einer anderen Spalte dieser Tab.

    Die erste Klammer sind die Anzahl der gefundenen Datensätze.

    Was meinst du denn damit? Die erste Klammer ist ein Index in das Feld, keine Anzahl.

    Jetzt möchte ich nur die Array-Elemente mit einem bestimmten Wort z.B. Winter.

    $index=array_search("Winter",$array[0][1]);

    Bist du dir sicher, daß du das richtige Feld an array_search() übergeben hast? Ich werde aus deiner Beschreibung oben nicht so ganz schlau, momentant sieht es so aus, als wenn du ein dreidimensionales Feld hast, d.h. in $array[0][0] und $array[0][1] sind die Felder, in denen die Werte sind:

    $array[0][1][0]="Sommer";
    $array[0][1][1]="Winter";
    $array[0][1][2]="Herbst";
    $array[0][1][3]="und";
    $array[0][1][4]="Frühling";

    Prüfe doch mal mit var_dump(), wo dein zu durchsuchendes Feld eigentlich ist.

    Gruß,
      soenk.e

    1. Was meinst du denn damit? Die erste Klammer ist ein Index in das Feld, keine Anzahl.

      Genau das meine ich:
      $array[0][0]; die id des 1. Datensatzes
      $array[1][0]; die id des 2. Datensatzes usw.

      $index=array_search("Winter",$array[0][1]);

      Gibt folgendes aus:
      Warning: Wrong datatype for second argument in call to array_search

      Bist du dir sicher, daß du das richtige Feld an array_search() übergeben hast? Ich werde aus deiner Beschreibung oben nicht so ganz schlau, momentant sieht es so aus, als wenn du ein dreidimensionales Feld hast, d.h. in $array[0][0] und $array[0][1] sind die Felder, in denen die Werte sind:

      $array[0][1][0]="Sommer";
      $array[0][1][1]="Winter";
      $array[0][1][2]="Herbst";
      $array[0][1][3]="und";
      $array[0][1][4]="Frühling";

      $array[0][2] = "Winter" usw. Bei einer 3. Klammer passiert nichts.

      Prüfe doch mal mit var_dump(), wo dein zu durchsuchendes Feld eigentlich ist.

      Das ist das Ergebnis von var_dump:

      array(81) { [0]=> array(3) { [0]=> string(1) "3" [1]=> string(162) "" [2]=> string(9) "mountains" }

      1. $array[0][1][0]="Sommer";
        $array[0][1][1]="Winter";
        $array[0][1][2]="Herbst";
        $array[0][1][3]="und";
        $array[0][1][4]="Frühling";

        $array[0][2] = "Winter" usw. Bei einer 3. Klammer passiert nichts.

        Prüfe doch mal mit var_dump(), wo dein zu durchsuchendes Feld eigentlich ist.

        Das ist das Ergebnis von var_dump:

        array(81) { [0]=> array(3) { [0]=> string(1) "3" [1]=> string(162) "" [2]=> string(9) "mountains" }

        Ahso, du hast also also ein Feld, das die Zeilen einer Datenbank enthält. Muß einem ja gesagt werden :)

        Ein Feld besteht immer aus einem Index (key) und seinem Wert (value), bzw. mehreren davon. array_search() durchsucht nur Felder ansich, d.h. kann nur die einzelnen Werte vergleichen. Deine "Werte" sind aber Felder (eben je eine Datenbankzeile), und da du keine Möglichkeit hast, ein komplettes Feld zu vergleichen, geht's auch nicht mit array_search().

        Du kannst entweder eine ordinäre Schleife zum Suchen nehmen oder du benutzt array_walk().

        Gruß,
          soenk.e

        1. Hallo

          also mal vielen Dank. Ist mir schon viel Wert, dass ich weis warums mit array_search() nicht klappt.
          Das mit array_walk() werde ich mal versuchen, habs aber noch nie benutzt. Mit der Schleife verstehe ich nicht ganz.

          Tschüss
          Falk

          1. Hallo,

            habs aufgegeben :( es funktioniert nicht.

            Falk

            1. Hallo Sönke,

              der Tip mit der Schleife hat mir doch noch sehr geholfen. Manchmal blick ich einfach nicht das Einfachste :)

              Tschüss
              Falk

          2. also mal vielen Dank. Ist mir schon viel Wert, dass ich weis warums mit array_search() nicht klappt.
            Das mit array_walk() werde ich mal versuchen, habs aber noch nie benutzt. Mit der Schleife verstehe ich nicht ganz.

            Naja, ganz ordinär halt:

            for ($i=0;$i<sizeof($array);$i++)
             {
              if ($array[$i][23]=="Ostern")
                {
                 //eine Oster-Zeile gefunden, irgendwas damit machen.
                };
             };

            Gruß,
              soenk.e