0 Vergleicht (-Operator ist ==) mit jeder führenden -Zeichenfolge, die keine Zahl ist (oder mit anderen Worten ein Zeichen, das nicht in eine Zahl umgewandelt werden kann). und gibt true zurück.
Der Grund dafür ist, dass beim Vergleichen von Zahlen mit Zeichenfolgen zunächst versucht wird, die Zeichenfolge in eine Zahl umzuwandeln, und dann zu vergleichen. Wenn eine Zeichenfolge nicht in eine Zahl umgewandelt werden kann, ist das Konvertierungsergebnis 0. Ein Vergleich mit 0 gibt also immer true zurück.
Wenn in PHP zwei numerische Zeichenfolgen (Zeichenfolgen, die nur Zahlen enthalten) verglichen werden, werden sie zum Vergleich direkt in numerische Werte umgewandelt
Das folgende Beispiel : (Beachten Sie, dass $a und $ bdie letzten Ziffern der beiden Variablen nicht gleich sind)
Beispielcode:
<?php $a = '511203199106034578'; $b = '511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
Führen Sie das obige Programm aus, stellen Sie jedoch fest, dass das Ergebnis gleich ist (nicht). Ergebnis, das wir dachten) Wir setzen $a bzw. fügen einen Buchstaben a zu $b hinzu
<?php $a = 'a511203199106034578'; $b = 'a511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
Dieses Mal ist die Ausgabe notEqual (das richtige Ergebnis)
Erklärung: Das obige Beispiel ist gleich weil PHP zwei numerische Zeichenfolgen in einen numerischen Typ umwandelt und die beiden Zahlen genau gleich sind
<?php $a = 511203199106034578; $b = 511203199106034579; echo $a; // 输出 5.1120319910603E+17 即511203199106030000 echo $b; // 输出 5.1120319910603E+17 即511203199106030000 ?>
Das Ergebnis, das wir im Beispiel erhalten, ist also gleich
Um dieses unerwartete Ergebnis zu vermeiden, verwenden Sie den Typvergleich Operator == =Das folgende Beispiel (wenn $a gleich $b ist und ihre Typen auch gleich sind)
<?php $a = '511203199106034578'; $b = '511203199106034579'; if ($a===$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
Erklären Sie es anhand eines Beispiels
<?php $str1 = "123456789012345678"; $str2 = "123456789012345679"; if($str1 == $str2){ echo "1.equal\n"; }esle{ echo "1.not equal\n"; } if($str1 === $str2){ echo "2.equal\n"; }esle{ echo "2.not equal\n"; } if(strcmp($st1, $str2)==0){ echo "3.equal\n"; }esle{ echo "3.not equal\n"; } if($str1 == $str2){ echo "1.equal\n"; }esle{ echo "1.not equal\n"; }
Das Ergebnis danach Das Ausführen ist ziemlich seltsam:
1.gleich
2.ungleich
3.ungleich
Nach Überprüfung des Grundes, wenn PHP zwei Zahlen vergleicht Zeichenfolgen, zuerst Diese beiden Zeichenfolgen werden als Zahlen behandelt und in wissenschaftlicher Notation gespeichert, die 16 Dezimalstellen beibehält. Mit anderen Worten, beim Speichern gilt: $str1=1.2345678901234567E+17; $str2=1.2345678901234567E+17. Es wird also festgestellt, dass $str1==$str2. Unterschiedliche Längen, das Hinzufügen nicht numerischer Zeichen zur Zeichenfolge usw. führen dazu, dass die beiden Zeichenfolgen ungleich sind. Daher wird empfohlen, die dreifache Gleichheitszeichenbeurteilung zu verwenden, wenn der Datentyp bestimmt werden kann, oder strcmp oder strcasecmp für eine starke Typbeurteilung zu verwenden.
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung häufiger Traps in PHP-Zahlen und -Strings. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!