[php] prüfen ob Teil aus Array im anderen Array existiert

tobias1985

Der Erlöser
ID: 37913
L
24 April 2006
4.963
607
Hallo zusammen,
ich steh gerade voll auf dem Schlauch. Vielleicht könnt ihr weiterhelfen. :)

PHP:
$variable1 = '|2|3|5|';
$array1 = split('[|.-]', $variable1);

$variable2 = '|1|6|7|11|';
$array2 = split('[|.-]', $variable2);

foreach($array1 as $v){
  if($v != '' && array_key_exists($v, $array2)){
    echo 'in Array2 vorhanden';
  }
}

Dieser Code gibt 3 mal "in Array2 vorhanden" aus. Aber warum? Das Array1 beinhaltet doch nur 2, 3 und 5. Das foreach geht also 2, 3 und 5 durch und schaut obs in $array2 vorhanden ist. In $array2 ist aber nur 1,6,7,11 vorhanden.
Warum also ist array_key_exists true, wenn die Funktion prüft ob zum Beispiel 2 in dem Array drin ist, das aber nur 1,6,7,11 beinhaltet?

Ich hoffe jemand weiß Rat.
 
Hi,

Das liegt daran, weil du den String falsch aufsplittest:
array(5) {
[0]=> string(0) ""
[1]=> string(1) "2"
[2]=> string(1) "3"
[3]=> string(1) "5"
[4]=> string(0) ""
}
array(6) {
[0]=> string(0) ""
[1]=> string(1) "1"
[2]=> string(1) "6"
[3]=> string(1) "7"
[4]=> string(2) "11"
[5]=> string(0) ""
}
 
Kapier ich immernoch nicht. Die Werte aus Array 1 sind doch immernoch nicht in Array2 vorhanden?! Klar, die leeren Arrays sind vorhanden, aber die fange ich doch ab?! ($v != '')
 
Es geht nicht um die Werte, sondern um die Schlüssel.

Es wird in Array 2 gesucht, ob die Werte aus Array 1 dort als Schlüssel vorkommen - so sie ungleich '' sind.
Code:
array(6) { 
	[0]=>  string(0) "" 
	[1]=>  string(1) "1" 
[B] 	[[COLOR=Red]2[/COLOR]]=>  string(1) "6" [/B]
[B] 	[[COLOR=Red]3[/COLOR]]=>  string(1) "7" [/B]
	[4]=>  string(2) "11" 
[B] 	[[COLOR=Red]5[/COLOR]]=>  string(0) "" [/B]
}
3 Treffer, 3 Ausgaben ;)

Ich glaube, du hast einfach die falsche Funktion benutzt - oder ich weiß nicht, was du eigentlich willst :mrgreen:
 
Ohje, man sollte ab und zu Pause machen beim Programmieren. :LOL:

Natürlich hast du Recht, theHacker. Ich habe die falsche Funktion benutzt. Die richtige Funktion ist natürlich in_array().

Danke für den Hinweis! Manchmal sieht man den Wald vor lauter Bäumen nicht. Zum Glück gibt es aber User die beim fällen helfen. :ugly:

Vielen Dank. ;)
 
Wenn du solche Ausgaben machst, dann mach in Zukunft das ausführlicher, z.B.
PHP:
echo "$v in Array2 vorhanden";
Dann siehst du sofort, was du für Müll gebaut hast oder wo ein Fehler stecken könnte.

x-mal dieselbe Ausgabe bringt dir in ner Schleife nichts, weil du nicht weißt, bei welchem Durchgang die if-Bedingung erfüllt und somit die Ausgabe getätigt wurde.
 
Hatte ich drin. Aber die Ausgabe 2, 3 und 5 haben mir auch nicht die Erleuchtung gebracht bzw mich verwirrt, wieso 2, 3 und 5 im Array vorkommen sollen.
Dass ich ausversehen die Funktion zum suchen im Key genutzt habe, ist mir dabei nicht aufgefallen. :ugly: