php字符串比较
typecho
typecho 2017-06-16 09:18:38
0
4
973

我在使用php作字符串比较的时候,遇到了坑,如代码所示:

    <?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
    ?>

第一个得到的结果是true,而第二个为false。翻了一下官方文档,如果第①个强制转换成数字 0,那么第②个应该强制转换成134,但是如果是转为134则第③个应该是正确的。
我打印了一下两个字符串,得出来的结果也很奇怪,看了官方文档根本搞不懂,求大神指教一下!

typecho
typecho

Following the voice in heart.

全部回复(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 这种弱类型语言,能用===就别用==

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板