array_search - Fehler

Loveboat

Erfahrenes Mitglied
Hi Leute, kämpfe ein wenig mit der Funktion array_search() obwohl ich bisher keine Probleme hatte, vielleicht ist es auch einfach nur zu spät für heut....*mal an der Uhr dreht.


So, ich benutze diese Funktion auf zwei Seiten, um einen Wert in einem Array zu suchen. Sollte der Wert vorhanden sein, gibt es ne Fehlermeldung. Wenn nein, dann ist's gut. :)


Seite 1 (funktioniert fehlerfrei, "cenFONTrightRED" bedeutet Fehler = neue CSS-Klasse für die Schrift in rot):

PHP:
var_dump($_SESSION["contact-error"]);
 
if(array_search('cenFONTrightRED', $_SESSION["contact-error"]))
  echo "Es wurde ein Fehler gefunden!";
else 
  echo "Kein Fehler gefunden!";

Der Output hierfür:

Code:
array(4) { 
["name"]=> string(15) "cenFONTrightRED" 
["mail"]=> string(12) "cenFONTright" 
["message"]=> string(15) "cenFONTrightRED" 
["value"]=> string(15) "cenFONTrightRED" 
} 
 
Es wurde ein Fehler gefunden!

Wie man sieht gibt es 3 Einträge im Array die dem Suchstrin entsprechen, also Abzweig in die erste ECHO-Ausgabe.


Seite 2 (funktioniert falsch, "cenFONTLeftPadRED" bedeutet Fehler = neue CSS-Klasse für die Schrift in rot):

PHP:
var_dump($_SESSION["booking-error-con"]);
 
if(array_search('cenFONTLeftPadRED', $_SESSION["booking-error-con"]))
  echo "Es wurde ein Fehler gefunden!";
else 
  echo "Kein Fehler gefunden!";

Der Output hierfür:

Code:
array(10) { 
[0]=> string(17) "cenFONTLeftPadRED" 
[1]=> string(14) "cenFONTLeftPad" 
[2]=> string(14) "cenFONTLeftPad" 
[3]=> string(14) "cenFONTLeftPad" 
[4]=> string(17) "cenFONTLeftPadRED" 
[5]=> string(14) "cenFONTLeftPad" 
[6]=> string(14) "cenFONTLeftPad" 
[7]=> string(17) "cenFONTLeftPadRED" 
[8]=> string(14) "cenFONTLeftPad" 
[9]=> string(14) "cenFONTLeftPad" 
} 
 
Kein Fehler gefunden!


FRAGE: Warum springt die Anweisung in Seite 2 in die falsche Verzweigung? Wie man doch erkennen kann ist ein String mit dem Wert "cenFONTLeftPadRED" in meinem Session-Array vorhanden. In Seite 1 springts in die richtige Anweisung.

Wo ist mein Fehler?

Hoffe jemand kann mir zu später Stund noch meine Augen öffnen :)

Danke und Gruß
Loveboat
 
[phpf]array_search[/phpf] gibt boolesches true zurück, sondern nur ein false. Deine Prüfung sollte also so aussehen:

PHP:
if(array_search('cenFONTrightRED', $_SESSION["contact-error"]) !== false)
  echo "Es wurde ein Fehler gefunden!";
else 
  echo "Kein Fehler gefunden!";

Für den zweiten Fall ebenso.

Bei Erfolg liefert [phpf]array_search[/phpf] den Schlüsselnamen des gefundenen Wertes zurück.
 
Spontan keine Ahnung. Das Verhalten wäre mir rätselhaft.

Generell ist [phpf]array_search[/phpf] aber nicht die richtige Funktion für dich. [phpf]in_array[/phpf] dürfte dir da besser zur Seite stehen, da es eben nur einen booleschen Wert zurückgibt.
 
gott, tausende Funktionen, wie kann man sich merken welche die bessere ist wenn man das ganze eher als Laie macht? Aber Recht haste, wie immer, die Funktion ist besser. Habe sie genutzt und tut direkt. Vielen Dank mal wieder an Dich für die schnelle Hilfe. Somit ist mein Abend gerettet und ich kann mein Buchungsformular abschließen.

Gruß
Loveboat
 
Die array_search()-Funktion gibt anders als die in_array()-Funktion nicht nur zurück, ob der gesuchte Wert im Array enthalten ist, sondern auch den Schlüssel des jeweiligen Elements.
Wenn das gesuchte Wort also direkt im ersten Element eines numerischen Arrays auftaucht, ist der Rückgabewert 0, was dem Booleschen Wert false entspricht. Deswegen muss immer auf Nichidentität mit false geprüft werden, da nur dieser Rückgabewert bedeutet, dass der gesuchte Wert im Array nicht enthalten ist.
In deinem ersten Beispiel wird „name“ zurückgegeben, was wiederum dem Booleschen Wert true entspricht.
 

Neue Beiträge

Zurück