bruce: array durchsuchen

Hi an alle,

irre ich mich? arrays durchsucht man doch mit array_search(suchstring, array), oder? das funktioniert aber bei mir nicht. folgender code steht in einer schleife:

if (Array_search($currentRow[1], $_Array) == false) {
 // Wenn $currentRow[1] nicht im Array steht, dann
 // $currentRow[1] (aktueller name) ins array schreiben
}

in $currentRow[1] steht der aktuelle name. nur wenn dieser nicht bereits in dem array steht, soll er dem array hinzugefügt werden, ansonsten nicht. denn ich will die namen nicht doppelt im array haben.

wo liegt also mein fehler?

Ich freue mich auf antworten.
mfg
bruce

  1. Hallo Bruce!

    if (Array_search($currentRow[1], $_Array) == false) {
    // Wenn $currentRow[1] nicht im Array steht, dann
    // $currentRow[1] (aktueller name) ins array schreiben
    }

    Auf php.net findest du immer Erklärungen der PHP-Funktionen.
    Dort siehst du, dass der Schlüssel der needle im Array zurückgegeben wird.
    Durch == wird eine 0 auch false gleichgesetzt! Um das zu verhindern, musst du === verwenden, da dabei auch der Typ der Variable verglichen wird (hier eben int und bool).
    Vllt war das dein Fehler :-)

    werbeklaus

    Achja, schreibe Funktionen lieber klein!

    1. nein, daran lags nciht, trotzdem danke.

      könnte es vllt daran liegen, dass das ein mehrdimensionales array ist?
      also array[1][0] ?

      bruce

      1. Hallo,

        nein, daran lags nciht, trotzdem danke.

        könnte es vllt daran liegen, dass das ein mehrdimensionales array ist?
        also array[1][0] ?

        Wie, die Elemente des zu durchsuchenden Arrays sind wieder Arrays?
        --> Dann muss die needle natürlich auch dieses array sein!

        Oder du durchsuchst eine tiefere Ebende?
        --> Das dürfte kein Problem sein!

        werbeklaus

        1. Ich durchsuche eine tiefere Ebene, also der name würde bei "array[i][j]" in "[j]" stehen, aber das funktioniert nicht. Ich hab mir einfach eine Schleife gebaut, die jedes Element durchgeht und prüft.

          1. Hallo,

            ... das sollte dann aber eine rekursive Funktion sein.

            LG
            Chris

            1. Mh, das sagt mir nichts, sry, was meinst du damit?

              1. Hi,

                Auszug von http://ffm.junetz.de:
                Rekursion ist ein beliebtes Mittel der Programmierpraxis, um Probleme zu lösen, die an mindestens einer Stelle zu einem weiteren Problem führen, das aber in Wirklichkeit nichts anderes ist als das ursprüngliche Problem, ggf. mit leicht veränderten Voraussetzungen...

                MfG
                Ben

                1. Hallo,

                  Auszug von http://ffm.junetz.de
                  Rekursion ist ein beliebtes Mittel der Programmierpraxis, um Probleme zu lösen, die an mindestens einer Stelle zu einem weiteren Problem führen, das aber in Wirklichkeit nichts anderes ist als das ursprüngliche Problem, ggf. mit leicht veränderten Voraussetzungen...

                  Klasse Definition. Ganz ehrlich!
                  Aber wenn sie dem OP nichts nützen sollte, nochmals etwas expliziter:

                  Die Funktion array_search() sucht nur eine verkettete Liste durch, nicht allerdings Bäume. Da "Arrays" in PHP allerdings nicht als geschlossene Speicherstruktur, sondern als verkettete Listen (Bäume) gespeichert werden, muss man bei jedem Element erst prüfen, ob es skalar oder vektoriell (Einsprung in weiteren Zweig, "Array") ist.

                  Wenn es ein Skalar ist, kann man Dank der automatischen Typumwandlung direkt vergleichen (wenn nicht "strict" gewählt wurde), wenn es aber ein "Array" ist, muss die Funktion selber wieder aufgerufen werden mit diesem Element als Argument.

                  LG
                  Chris

          2. echo $begrüßung;

            Ich durchsuche eine tiefere Ebene, also der name würde bei "array[i][j]" in "[j]" stehen, aber das funktioniert nicht. Ich hab mir einfach eine Schleife gebaut, die jedes Element durchgeht und prüft.

            Es gibt bei PHP-Arrays keine Ebenen. Auch gibt es kein "mehrdimensional". Die Elemente eines Array in PHP können einfache (skalare) und zusammengesetzte Typen (Array, Object) aufnehmen. Damit entsteht eine Baumstruktur.

            array -+- 0 => integer
                   +- 1 => string
                   +- 2 => array -+- 0 => string
                   |              +- 1 => array -+- key1 => string
                   |              |              +- key2 => string
                   |              +- 2 => float
                   |
                   +- 3 => array -+- 0 => boolean
                                  +- 1 => integer
                                  +- 2 => string
                                  +- 3 => string
                                  +- 4 => object -+- var1 => ...
                                                  +- var2 => ...

            Wenn du dieses Prinzip verstanden hast, weißt du auch, warum du nicht _einfach_ in "einer tieferen Ebene" suchen kannst.

            Man kann durch das äußere Array durchgehen (foreach) und beim Auftreten eines weiteren Arrays in dieses verzweigen usw. Wenn man die Struktur kennt und sie nicht so kunterbunt wie in meinem Beispiel ist, dann kann man sich die Rekursion sparen.

            Viele Wege führen nach Rom, so auch beim Suchen eins Wertes in einem Array mit nicht nur skalaren Werten. Auf der Handbuchseite zu den Array Functions gibt es Funktionen, die dafür - neben foreach - verwendet werden können (z.B. array_walk, array_reduce). Doch zunächst solltest du versuchen, mit foreach dein Array zu durchlaufen.

            echo "$verabschiedung $name";