在官方手册中看函数 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 中的字符串大小?
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 ? '大' : '小'; //小小小 |
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 的,是不是更好理解一点? |
3
des 2018-08-07 20:58:00 +08:00 via Android
直接比大小不算事,试试看这个?
$a = "aabbzz"; $a++; echo $a; |
4
msg7086 2018-08-08 08:23:08 +08:00
直接比大小不算事,试试看这个?
if ('1e3' == '1000') echo 'LOL'; |
7
xoxo419 OP php 是把字符串转成 ASCII 或二进制再比较的么?
|
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 |
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; } ?> |
10
bapijun 2018-08-08 11:42:07 +08:00
顶楼上,只要看过官方文档就会知道,字符串比较会转换成数字,php 就是这样不爽不要玩
|