in_array() mit 2 arrays

südpol

Erfahrenes Mitglied
Hi,

ich habe mit der Funktion in_array() ein kleines Problem. lt http://uk2.php.net/manual/en/function.in-array.php kann diese Funktion seit Version 4.2.0 auch ein array als needle entgegen nehmen und mit dem haystack abgleichen. Zumindest ist das mein Rückschluss aus dieser Aussage gewesen: "Note: In PHP versions before 4.2.0 needle was not allowed to be an array." Da ich 4.3.3 einsetze war ich der Meinung das würde gehen. Leider gibt die Funktion immer false zurück - auch wenn Treffer vorhanden sind :(

Hat jemand eine Idee an was das liegen könnte?

Gruß
 
:) klar:

PHP:
if(in_array(array(1,2), array(2,3))) {
  echo "ja, es geht";
} else {
  echo "nein, es geht nciht";
}

Das Resultat ist immer nein. Egal wie ich die Werte in den beiden arrays angepasst habe. Ich habe mir jetzt noch mal die ganze Kommentage auf http://www.php.net angeschaut - könnte auch sein, dass die nur gemeint haben, dass man damit ganze array's matchchen kann. ich habe mir deshalb eine eigene funktion dafür geschrieben, die mit hilfe einer foreach schleife das ganze für mich erledigt. :D Wenns noch ne bessere Alternative gibt werfe ich die Funktion aber gerne in die Tonne :)

Gruß
 
Wenn ich die Funktionsreferenz auf zu [phpf]in_array[/phpf] richtig verstanden habe, wird bei der Verwendung zweier Arrays geprüft, ob das Array needle im Array haystack vorkommt. Also müsste haystack ein Array sein, was wiederum arrays enthält. Auf bein Beispiel angewendet, hieße das folgendes:
PHP:
if(in_array(array(1,2), array(array(1,2),array(2,3)))) {
  echo "ja, es geht";
} else {
  echo "nein, es geht nciht";
}
 
Hi,

jep nach dem Durchlesen der Beispiele wurde mir das auch klar :(

ich habe für mich jetzt eine generische Funktion geschrieben die ich intern nun für in_array verwende...

PHP:
function match_array($needle, $haystack) {
  if(is_array($needle)) {
    foreach($needle as $key => $value) {
      if(in_array($value, $haystack)) {
        return true;
      }
    }
  } else {
    if(in_array($needle, $haystack)) {
      return true;
    }
  }
  return false;
}

nicht ganz so schön wie ne fertige function aber sie tuts auch :-)

Dank dir!
 
Zurück