• php字符串比较


     

           比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说 就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了。或者使用strcmp来判断,但是这个能够告 诉你两个字符串是否相等,但是无法告诉你在那里不同。

      一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等。
      如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.

          22 == "22"; // 返回 true
          22 === "22"; // 返回false   

          正因为这样,所以我们的程式时常会发生一些想不到的“意外”:

          0 == "我爱你"; // 返回true
          1 == "1 我爱你";// 返回true

      php教程里更有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),他们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.他们比较的原理和其他语言的规则都是相同的。

    strcmp是用于区分大小写(即大小写敏感)的字符串比较:
    echo strcmp("abcdd", "abcde"); // 返回 1 (>0), 比较的是 "b"和"b"

    strcasecmp用于不区分大小写的字符串比较:
    echo strcasecmp("abcdd", "abcde"); // 返回 -1 (<0), 比较的是"d"和"e"

    strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
    echo strncmp("abcdd", "abcde", 3); // 返回 1 (>0), 比较了 abc 和 abc

    strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
    echo strncasecmp("abcdd", "abcde", 3); // 返回 0, 比较了 abc 和 abc, 由于不区分大小写,所以两者相同。

      更有一种情况是单单比较字符串大小,达不到我们预定的需求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,php提供了两个自然对比的函数strnatcmp,strnatcasecmp:

    echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
    echo strnatcasecmp("10.gif", "5.gif"); // 返回 1 (>0)

    http://hi.baidu.com/19821213/blog/item/14192c2aaeccfc315343c180.html


            在PHP中,使用==是不可靠的。即便是变量的类型相同,==为真也并不代表真的就相等。所以在php中尽量使用 === 来进行比较,使用 == 前一定要三思。 在PHP中 === 的操作是ZEND_IS_IDENTICAL,PHP不会尝试改变值的类型,非常严谨,比较的速度也要快一些。例如:

    $aa = '88.';//多个点
    $b = '88';

    if($aa == $b) 

         echo "相等";

    得到的结果是相等。因为88是一个数字,php会自动转换成整型或者浮点型进行==比较,当然会相等; strcmp是强制转换成string类型比较,===是要求数值一样并且类型一样 88是int类型,88.是浮点类型,当然不一样。用恒等 === 则 不会得到相等的结论.用strcmp()也不会得到相等的结论.所以最好不要使用 == 作为字符串相等比较.改用strcmp();

           对于俩个字符串, 会首先判断他们是否是numeric_string, 如果是,那么就会转换成整形来比较.. 那么什么是numeric string呢? 因为PHP不区分类型, 所以它采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字,然后转换为整形来比较。

  • 相关阅读:
    消息队列简介
    docker快速构建oracle数据库
    MySQL读写分离之amoeba
    Python替换文件内容
    Nginx图片及样式文件不记录访问日志
    shell方式切割tomcat日志
    split命令
    orange安装文档
    openresty安装文档
    MySQL中kill所有慢查询进程和锁表进程
  • 原文地址:https://www.cnblogs.com/hechunhua/p/3044621.html
Copyright © 2020-2023  润新知