dedlfix: Meine Lösung

Beitrag lesen

Tach!

<del>Disclaimer: Dies stellt selbstverständlich keine Kritik am Vorposter dar, denn die mag er nicht besonders. Folgendes ist nur so fürs Archiv dahergesagt.</del>

Ich würde das universeller gestalten und in eine Funktion kapseln wollen.

Die Aufgabe war nicht, nur herauszufinden ob ein Wert irgendwo in einem beliebig tief verschachtelten Array enthalten ist, sondern konkret in einem speziellen Key eines Unterarrays nachzuschauen und bei Übereinstimmung den zu diesem Unterarray gehörenden Key des Hauptarrays zurückzuliefern. Die vorliegende Lösung geht also so ziemlich am Thema vorbei.

  • geht für arrays mit beliebiger verschachtelung (oder 'Dimensionen' - den Begriff gebrauche ich auch um es Anfängern anschaulich zu machen)

Anschaulicher im eigentlichen Wortsinne finde ich, das Augenmerk auf die Stuktur zu lenken, wie sie wirklich ist, und nicht ihr nur einfach einen unpassenden aber weit fehlgebrauchten Begriff zu verpassen. Anschaulicher wäre für mich beispielsweise auf eine print_r()-Ausgabe hinzuweisen, in der man die einzelnen Arrays zu sehen bekommt, mit denen man für eine Aufgabenlösung arbeiten muss.

Der folgende Code kann zumindest verwendet werden, um das "ob" zu ermitteln, wenn das "wo" und andere Details unwichtig sind.

// als Funktion gekapselt

function IsInArray($search, $haystack) {
     $bol=false;
     foreach (array_keys($haystack) as $k) {
          if (is_array($haystack[$k])) {               // wenn array, dann:
               $bol=IsInArray($search, $haystack[$k]); // rekursiver Funktionsaufruf
          } elseif ( $haystack[$k] == $search ) {
               $bol=true;
          }
          if ($bol) { return $bol; }
     }
     return false;
}

  
array\_keys() läuft einmal durch das Array durch und sammelt alle Schlüssel ein. foreach(array\_keys()...) läuft nun durch dieses Key-Array durch. $haystack[$k] läuft wieder durch das erste Array durch, zumindest bis das zum Key $k gehörende Element gefunden wurde. Das dann aber dreimal. Durch die Rekursion wird das Ganze nicht besser.  
  
foreach ($haystack as $v) und im weiteren Verlauf $v zu verwenden, erledigt die Aufgabe bei nur einem Durchlauf. Und $bol kann man auch noch rauskürzen.  
  
~~~php
function IsInArray($search, $haystack) {  
    foreach ($haystack as $v) {  
        if (is_array($v) and IsInArray($search, $v)) {  
            return true;  
        } elseif ($v == $search) {  
            return true; // sofortiges Ende, wenn gefunden  
        }  
    }  
    return false;  
}

dedlfix.

0 45

Prüfen, ob Wert in einem mehrdimensionalen Array vorhanden ist

Wolowitz
  • php
  1. 0
    T-Rex
    1. 0
      Wolowitz
      1. 0
        Der Martin
        1. 0
          Wolowitz
          1. 0
            Der Martin
            1. 0
              Wolowitz
              1. 3
                dedlfix
                1. 0
                  Wolowitz
                  1. 0
                    dedlfix
                    1. 0
                      Wolowitz
          2. 0
            T-Rex
            1. 0
              Wolowitz
  2. 0
    dedlfix
    1. 0
      Wolowitz
      1. 1
        Der Martin
      2. 0
        dedlfix
        1. 0
          Wolowitz
          1. 0
            Der Martin
        2. 0
          seth_not@home
          1. 0
            Der Martin
          2. 0
            dedlfix
            1. 0

              bezeichnung "mehrdimensionales array"

              seth
              • meinung
              1. 0
                dedlfix
                1. 0
                  seth
                2. 0
                  seth
                  1. 0
                    dedlfix
                  2. 0
                    Blaubart
                    1. 0
                      dedlfix
                      • php
                    2. 0
                      seth
          3. 0
            Fred Furunkelstein 2013
            1. 0

              oberlehrerhaft

              seth
              • menschelei
              1. 0
                Jörg Reinholz
  3. 0

    Meine Lösung

    Wolowitz
    1. 0
      Matthias Apsel
    2. 0
      Jörg Reinholz
      1. 0

        Meine Lösung: Suchen und Ersetzen von Werten in Arrays(Hash

        Jörg Reinholz
      2. 0
        dedlfix
    3. 0
      bubble
    4. 0
      hotti
      1. 0
        Wolowitz
        1. 0
          Der Martin
          1. 0
            Fred Furunkelstein 2013
        2. 0
          dedlfix
        3. 0
          hotti