Mickymaus: if($Key == $Value)

Guten Mittag,

Ich habe gerade ein sehr komisches Problem:

if($Key == $Filter) {  
				echo "Key found - Key: $Key - Value: $Value - Filter: $Filter<br><br>";  
				$this->FilteredData[] = array($Key => $Value);  
			}

Das ist mein sehr simpler Code. Funktioniert auch, bis auf dass er manchmal falsche Beispiele findet.

Key found - Key: 0 - Value: Array - Filter: test

Key found - Key: 0 - Value: Poon, JCH - Filter: test

Key found - Key: 0 - Value: Cilastatin - Filter: test

Key found - Key: 0 - Value: Array - Filter: test

Wenn ich ein Array reinschmeisse, dass mit foreach() durchgegangen wird und gelegentlich als Key "test" hat, soll er mir alle test-Keys samt zugehörigen Werten in FilteredData zusammenschreiben. Tut er auch, nur dass er manchmal wenn der Key 0 vorkommt diese auch dazuschreibt. Wieso? 0 heisst ja auch false. Aber false == 'test' ? Das kann nicht wirklich sein. Woran liegt sowas?

  1. Moin,

    Das ist mein sehr simpler Code. Funktioniert auch, bis auf dass er manchmal falsche Beispiele findet.
    Wenn ich ein Array reinschmeisse, dass mit foreach() durchgegangen wird und gelegentlich als Key "test" hat, soll er mir alle test-Keys samt zugehörigen Werten in FilteredData zusammenschreiben. Tut er auch, nur dass er manchmal wenn der Key 0 vorkommt diese auch dazuschreibt. Wieso? 0 heisst ja auch false. Aber false == 'test' ? Das kann nicht wirklich sein. Woran liegt sowas?

    Dadurch, dass du nicht auf Typengleichheit prüfst, und PHP versucht, andere Datentypen entsprechend zu parsen, kann dieser Fehler auftreten. Sicherer (und richtiger) ist es daher auch auf Typengleichheit zu prüfen:

    if($Key === $Filter) {

    Grüße Marco

    1. Dadurch, dass du nicht auf Typengleichheit prüfst, und PHP versucht, andere Datentypen entsprechend zu parsen, kann dieser Fehler auftreten. Sicherer (und richtiger) ist es daher auch auf Typengleichheit zu prüfen:

      Hallo und Danke. Hat sofort funktioniert.

      Kannst du mir mal kurz erklären wie PHP intern vorgeht, wenn es auf so eine Angabe wie if($Key == $Value) oder auch if ($Key === $Value) trifft?

      Was sind die Schritte die PHP Stück für Stück abarbeitet? Wieso versucht er $Key dann zu parsen und wieso genau ergibt das dann 0 = 'test' ?

      Vielen Dank!

      1. Was sind die Schritte die PHP Stück für Stück abarbeitet? Wieso versucht er $Key dann zu parsen und wieso genau ergibt das dann 0 = 'test' ?

        Wenn mich nicht alles täuscht wird der Typ des rechten Operanden an den Typen des linken angepasst. Und wenn man probiert den String 'test' in eine Zahl zu konvertieren, kommt dabei eben 0 raus. Über die genauen Kovertierungsregeln habe ich auf die schnelle nichts im Handbuch finden kann, aber ich vermute sie folgen den allgemeinen Regeln von Type-Casting in PHP.

        1. Ah ok. So macht das natürlich Sinn. Vielen Dank.