PHP-String-Vergleich
typecho
typecho 2017-06-16 09:18:38
0
4
994

Bei der Verwendung von PHP zum String-Vergleich bin ich auf eine Falle gestoßen, wie im Code gezeigt:

    <?php
        var_dump('00E73694765433'=='0');  //true
        var_dump('0134b40fsbi94u8'=='0'); //false
        var_dump('0134b40fsbi94u8'=='134'); //false
        echo PHP_EOL;
        var_dump(is_numeric('00E73694765433'));//true
        var_dump(is_numeric('0134b40fsbi94u8'));//false
    ?>

Das erste erhaltene Ergebnis ist wahr, während das zweite falsch ist. Wenn nach Durchsicht der offiziellen Dokumente die erste Zahl zwangsweise in die Zahl 0 umgewandelt werden muss, dann sollte die zweite Zahl zwangsweise in 134 umgewandelt werden, aber wenn sie in 134 umgewandelt wird, sollte die dritte Zahl korrekt sein.
Ich habe zwei Zeichenfolgen gedruckt und das Ergebnis war sehr seltsam. Ich konnte es nicht verstehen, nachdem ich die offiziellen Dokumente gelesen hatte.

typecho
typecho

Following the voice in heart.

Antworte allen(4)
左手右手慢动作

http://www.php.net/manual/zh/...

var_dump('0134b40fsbi94u8'=='134'); //false 是比较的

因为都是字符串 就先比较第一位 第一位的比较结果 是0和1的比较 所以 是false

字符串与整形比较的话是转换类型,
字符串与字符串比较就是逐个比较
但是他们是从首位开始比较的,
也就是说 首位假如可以比较大小,就不再往下转换,不能比较的继续往下转换。能比较然后就不再往下比较
不能比较就往下接着看!
运行下下面这几个例子 你就明白了
var_dump('0134b40fsbi94u8'=='134')
var_dump('0134b40fsbi94u8'==134)
var_dump('134b40fsbi94u8'==134)
var_dump('134b40fsbi94u8'=='134')

另外 字符串之间的不建议使用比较运算符直接去比较大小,要是在需要比较php也提供了一些字符的比较函数

学习ing

不同类型的数据比较,最好还是用全等===和不全等!==运算符.
因为比较运算符全等===和不全等!==会对类型进行检查:

$a === $b 表示:如果$a等于$b,并且它们的类型也相同时,返回true.
$a !== $b 表示:如果$a不等于$b,或者它们的类型不同时,返回true.
if(false !== 0) echo time(); //输出时间戳
if(false !=  0) echo time(); //没有输出

一句话,比较时尽量用===和!==而不用==和!=.

此外,PHP还提供了一系列类型检查函数:

is_int/is_float/is_numeric/is_string/is_bool/is_null
is_array/is_object/instanceof/is_resource/is_callable

一些函数,也提供有类型检查参数,需要注意,比如:

in_array('value', $arr, true)
array_search('value', $arr, true)
array_keys($arr, 'value', true)

第三个参数的值为 true 则函数还会检查类型是否相同.

另外,PHP还支持用比较运算符==,!=,===,!==来比较两个数组或两个对象是否相等.

// 输出true,表示存在相同的键值对.
var_export( array('a' => 1, 'b' => '2D') ==  array('b' => 2, 'a' => 1) );

// 输出false,因为===不仅要求键值对相同,而且要求元素的【顺序】和【类型】也相同.
var_export( array('a' => 1, 'b' => 2) === array('b' => 2, 'a' => 1) );

// 输出false,因为两个数组的键值对是不同的。
var_export( array('a', 'b') == array('b', 'a') ); 
左边是:
array (
  0 => 'a',
  1 => 'b',
)
右边是:
array (
  0 => 'b',
  1 => 'a',
)

PHP还支持用比较运算符(==,!=,===,!==)判断两个对象是否相等:

class Foo {}
$foo1 = new Foo();
$foo2 = new Foo();
var_export($foo1 ==  $foo2); // true
var_export($foo1 === $foo2); // false (因为引用不同)
仅有的幸福

你第一个字符串恰好符合了科学计数法。
对于类型限制不严的语言,常有这样的坑上新闻。

尽量使用严格带类型的检查

習慣沉默

对于 php 这种弱类型语言,能用===就别用==

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage