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

2018-08-07 17:45:24 +08:00
 xoxo419

在官方手册中看函数 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 中的字符串大小?

4788 次点击
所在节点    程序员
10 条回复
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
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
2018-08-07 20:58:00 +08:00
直接比大小不算事,试试看这个?
$a = "aabbzz";
$a++;
echo $a;
msg7086
2018-08-08 08:23:08 +08:00
直接比大小不算事,试试看这个?

if ('1e3' == '1000') echo 'LOL';
xoxo419
2018-08-08 08:40:35 +08:00
@des
@msg7086 -_-| 强大的 PHP, 其他语言也这样么.
msg7086
2018-08-08 08:43:16 +08:00
@xoxo419 可以去试试 JavaScript。
xoxo419
2018-08-08 08:52:00 +08:00
php 是把字符串转成 ASCII 或二进制再比较的么?
airdge
2018-08-08 09:46:34 +08:00
字符串比较按照从左到右逐个字符对比
也可以可以用 strcmp
strcmp('a','A') //32 97-65
strcmp('ac','ad') //-1 99-100
strcmp('ac','fe') //-5 97-102
jevonszmx
2018-08-08 09:53:04 +08:00
@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
2018-08-08 11:42:07 +08:00
顶楼上,只要看过官方文档就会知道,字符串比较会转换成数字,php 就是这样不爽不要玩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477694

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX