zoukankan      html  css  js  c++  java
  • PHP字符串函数之 strcmp strncmp strcasecmp strncasecmp strnatcmp strnatcasecmp

    • strcmp – 二进制安全字符串比较
    • strncmp – 二进制安全比较字符串开头的若干个字符
    • strcasecmp – 二进制安全比较字符串(不区分大小写)
    • strncasecmp – 二进制安全比较字符串开头的若干个字符(不区分大小写)
    • strnatcmp – 使用“自然顺序”算法比较字符串
    • strnatcasecmp – 使用“自然顺序”算法比较字符串(不区分大小写)

    strcmp

    二进制安全字符串比较

    int strcmp ( string $str1 , string $str2 )

    如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    注意

    注意该比较区分大小写。

    示例

    <?php
    echo strcmp("Hello", "hello"); // -1
    echo strcmp("5", 5);       // 0
    echo strcmp("15", 0xf);    // 0
    echo strcmp(61529519452809720693702583126814, 61529519452809720000000000000000); //0
    echo strcmp(NULL, false);  // 0
    echo strcmp(NULL, "");     // 0
    echo strcmp(NULL, 0);      // -1
    echo strcmp(false, -1);    // -2
    echo strcmp("15", NULL);   // 2
    echo strcmp(NULL, "foo");  // -3
    echo strcmp("foo", NULL);  // 3
    echo strcmp("foo", false); // 1
    echo strcmp("foo", 5);     // 1
    /*
    NULL + PHP Warning 
    strcmp() expects parameter 2 to be string, array given in ...
    */
    echo strcmp("foo", array()); 
    /*
    NULL + PHP Warning 
    strcmp() expects parameter 2 to be string, object given in ...
    */
    echo strcmp("foo", new stdClass);
    /*
    NULL + PHP Warning 
    strcmp() expects parameter 1 to be string, object given in ...
    */
    echo strcmp(function(){}, "");
    这里会有同学有疑问,其他的还可以理解,但是
    strcmp(61529519452809720693702583126814, 61529519452809720000000000000000); //0
    比较结果竟然是相等,那么PHP内部是怎么执行的呢?
    
    原来在PHP内部s1和s2 都被转为了 "6.152951945281E+31" 来比较的,有效数字为前13位,所以相等。

    strncmp

    二进制安全比较字符串开头的若干个字符

    int strncmp ( string $str1 , string $str2 , int $len )

    该函数与 strcmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度

     

    返回值

    如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    注意

    注意该比较区分大小写。

    示例

    echo strncmp("xybc","a3234",0); // 0 
    echo strncmp("abcdef","abc",3); // 0
    echo strncmp("abcdef","abc",4); // 1

    strcasecmp

    二进制安全比较字符串(不区分大小写)

    int strcasecmp ( string $str1 , string $str2 )

    该函数与 strcmp() 函数类似,不同之处在于不区分大小写,其他可参考 strcmp()

     

    返回值

    如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    示例

    echo strcasecmp("Hello","hello"); // 0
    
    

    strncasecmp

    二进制安全比较字符串(不区分大小写)

    int strncasecmp ( string $str1 , string $str2 , int $len )

    该函数与 strcasecmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度 
    该函数与 strncmp() 也类似,不同之处在于不区分大小写

    返回值

    如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    示例

    echo strncasecmp("Hello","hello", 5); // 0
    echo strncasecmp("abcdef","ABC",3);   // 0

    strnatcmp

    使用自然排序算法比较字符串

    int strnatcmp ( string $str1 , string $str2 )

    该函数实现了以人类习惯对数字型字符串进行排序的比较算法,这就是“自然顺序”。

    返回值

    与其他字符串比较函数类似,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    注意

    注意该比较区分大小写。

    示例

    //我们来测试一下什么是“以人类习惯”
    echo strnatcmp("img10.png","img2.png"); // 1 说明该函数认为 img10.png 大于 img2.png 与人类习惯一致
    echo strcmp("img10.png","img2.png"); // -1 说明该函数认为 img10.png 小于 img2.png,计算机思维
    //在来看一个更直观的例子
    echo '<pre>';
    
    $arr1 = $arr2 = array(
    "img1.png",
    "img2.png",
    "img10.png",
    "img01.png",
    "img100.png",
    "img20.png",
    "img30.png",
    "img200.png");
    
    echo "标准字符串比较"."<br>";
    usort($arr1,"strcmp");
    print_r($arr1);
    
    echo "自然序列字符串比较"."<br>";
    usort($arr2,"strnatcmp");
    print_r($arr2);
    
    /*
    标准字符串比较Array
    (
        [0] => img01.png
        [1] => img1.png
        [2] => img10.png
        [3] => img100.png
        [4] => img2.png
        [5] => img20.png
        [6] => img200.png
        [7] => img30.png
    )
    自然序列字符串比较Array
    (
        [0] => img01.png
        [1] => img1.png
        [2] => img2.png
        [3] => img10.png
        [4] => img20.png
        [5] => img30.png
        [6] => img100.png
        [7] => img200.png
    )
    */

    strnatcasecmp

    使用“自然顺序”算法比较字符串(不区分大小写)

    int strnatcasecmp ( string $str1 , string $str2 )

    该函数实现了以人类习惯对数字型字符串进行排序的比较算法。除了不区分大小写,该函数的行为与 strnatcmp() 类似。

    返回值

    与其他字符串比较函数类似,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    示例

    //我们将上面例子中 img2.png改为大写
    echo '<pre>';
    $arr1 = $arr2 = array("img1.png","IMG2.png","img10.png","img01.png","img100.png","img20.png","img30.png","img200.png");
    
    echo "自然序列字符串比较 strnatcmp"."<br>";
    usort($arr2,"strnatcmp");
    print_r($arr2);
    
    echo "自然序列字符串比较 strnatcasecmp"."<br>";
    usort($arr2,"strnatcasecmp");
    print_r($arr2);
    /*
    自然序列字符串比较 strnatcmpArray
    (
        [0] => IMG2.png
        [1] => img01.png
        [2] => img1.png
        [3] => img10.png
        [4] => img20.png
        [5] => img30.png
        [6] => img100.png
        [7] => img200.png
    )
    自然序列字符串比较 strnatcasecmpArray
    (
        [0] => img01.png
        [1] => img1.png
        [2] => IMG2.png
        [3] => img10.png
        [4] => img20.png
        [5] => img30.png
        [6] => img100.png
        [7] => img200.png
    )
    */
  • 相关阅读:
    hdoj:2075
    hdoj:2072
    hdoj:2071
    hdoj:2070
    hdoj:2069
    test001
    hdoj:2067
    hdoj:2061
    hdoj:2058
    hdoj:2057
  • 原文地址:https://www.cnblogs.com/echoshao/p/6513372.html
Copyright © 2011-2022 走看看