V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xoxo419
V2EX  ›  程序员

PHP 字符串可以直接比较大小?

  •  
  •   xoxo419 · 2018-08-07 17:45:24 +08:00 · 4758 次点击
    这是一个创建于 2060 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在官方手册中看函数 array_diff_ukey, 中的例子如下

    <?php
    function key_compare_func($key1, $key2)
    {
        if ($key1 == $key2)
            return 0;
        else if ($key1 > $key2)
            return 1;
        else
            return -1;
    }
    
    $array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
    $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
    
    var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
    

    key_compare_func 这个回调函数直接比较 key 中的字符串大小?

    10 条回复    2018-08-08 11:42:07 +08:00
    airdge
        1
    airdge  
       2018-08-07 18:34:59 +08:00
    $a = 'a';
    $b = 'b';
    echo $a > $b ? '大' : '小';
    $a = 'ab';
    $b = 'ac';
    echo $a > $b ? '大' : '小';
    $a = 'acc';
    $b = 'd';
    echo $a > $b ? '大' : '小';
    //小小小
    randyzhao
        2
    randyzhao  
       2018-08-07 20:47:05 +08:00
    此方法重点不是让你比大小。
    主要是取 diff 啊。


    function key_compare_func($key1, $key2)
    {
    if ($key1 == $key2)
    return 0;
    else
    return 1;
    }

    写成这样也是 ok 的,是不是更好理解一点?
    des
        3
    des  
       2018-08-07 20:58:00 +08:00 via Android
    直接比大小不算事,试试看这个?
    $a = "aabbzz";
    $a++;
    echo $a;
    msg7086
        4
    msg7086  
       2018-08-08 08:23:08 +08:00
    直接比大小不算事,试试看这个?

    if ('1e3' == '1000') echo 'LOL';
    xoxo419
        5
    xoxo419  
    OP
       2018-08-08 08:40:35 +08:00
    @des
    @msg7086 -_-| 强大的 PHP, 其他语言也这样么.
    msg7086
        6
    msg7086  
       2018-08-08 08:43:16 +08:00
    @xoxo419 可以去试试 JavaScript。
    xoxo419
        7
    xoxo419  
    OP
       2018-08-08 08:52:00 +08:00
    php 是把字符串转成 ASCII 或二进制再比较的么?
    airdge
        8
    airdge  
       2018-08-08 09:46:34 +08:00   ❤️ 1
    字符串比较按照从左到右逐个字符对比
    也可以可以用 strcmp
    strcmp('a','A') //32 97-65
    strcmp('ac','ad') //-1 99-100
    strcmp('ac','fe') //-5 97-102
    jevonszmx
        9
    jevonszmx  
       2018-08-08 09:53:04 +08:00   ❤️ 1
    @xoxo419 他们是典型的 php 黑啊,这是 php 的语言特色啊,文档里面明明白白写着的,自己乱用,还赖语言。

    http://php.net/manual/zh/language.operators.comparison.php

    写的清清楚楚:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

    例子也有:

    <?php
    var_dump(0 == "a"); // 0 == 0 -> true
    var_dump("1" == "01"); // 1 == 1 -> true
    var_dump("10" == "1e1"); // 10 == 10 -> true
    var_dump(100 == "1e2"); // 100 == 100 -> true

    switch ("a") {
    case 0:
    echo "0";
    break;
    case "a": // never reached because "a" is already matched with 0
    echo "a";
    break;
    }
    ?>
    bapijun
        10
    bapijun  
       2018-08-08 11:42:07 +08:00
    顶楼上,只要看过官方文档就会知道,字符串比较会转换成数字,php 就是这样不爽不要玩
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1034 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:26 · PVG 06:26 · LAX 15:26 · JFK 18:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.