【问题标题】:Why does PHP seem to discard parts of an Int/String comparison?为什么 PHP 似乎会丢弃部分 Int/String 比较?
【发布时间】:2016-01-28 20:45:50
【问题描述】:

今天我在和同事谈论 JavaScript 和 PHP 的怪异之处时,发现了一些对我来说非常时髦的东西:

var_dump( 1 == "123" ); // bool(false)
var_dump( 1 == "1 23" ); // bool(true)

第一个例子是我所期望的。 PHP 可能会将“123”强制转换为整数并进行比较。然而,第二个并没有真正的意义。我认为强制规则不允许丢弃“1 23”中的空格和 23 进行比较,但似乎 PHP 只是将它们扔出去做它的业务。

我在这里完全错过了什么吗?

【问题讨论】:

标签: php string int comparison


【解决方案1】:

空格不是整数中的有效字符,因此当 PHP 执行 string->int 转换时,字符串中的空格充当终止符

$x = "1 23";
$y = "12 3";
$z = "1a 23";
echo (int)$x; // 1
echo (int)$y; // 12
echo (int)$z; // 1

【讨论】:

    【解决方案2】:

    来自 cmets 的两个答案。

    来自Mark Baker,PHP 文档回答:

    它需要第一个非数字,因为它是这样写的,documented as such

    VolkerK 我们得到 RTM 答案:

    归结为simple call to strtol(...,null, 10),即前导数字被解释为数字,其他所有内容都被忽略。

    你有它。

    【讨论】:

    • 嘿,等一下。我的不是 RTFM 答案,而是“如果你想知道原因:它在代码中”-答案 ;-)
    • @VolkerK 抱歉,我可以编辑它。我认为它是 RTFM,因为它几乎是 PHP 工作方式的“手册”:P
    猜你喜欢
    • 2012-03-17
    • 2019-03-09
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多