Posted by & filed under 每日一题.

【四脚猫】每日一题(9月19日):不运行,分析下以下PHP代码输出结果是多少? 为什么会这样?

1
2
3
4
5
$items = array(0=>1,"aa"=>2, 3, 4);
 
foreach($items as $key=>$val){
    print($key == "aa" ? 5 : $val);
}

参考答案:

如果的答案是1534就掉入陷阱了。
先看看这个数组最终形成的结构:

1
2
3
4
5
6
7
Array
(
    [0] => 1
    [aa] => 2
    [1] => 3
    [2] => 4
)

然后遍历每一个元素的key看等不等于aa,等于就用5替代。当我告诉你答案是5534的时候,你会不会有点惊讶!难道0等于”aa”吗?是的,0就等于”aa”,这道题重点就考你这个。在PHP中字符串和整形进行逻辑比较,字符串类型会自动转为整形,然后再进行判断。因此”aa”转换整形等于0,自然也就等于左边的0了。你可以使用全等于避免这种该情况,也就是如果你写成:

1
print($key === "aa" ? 5 : $val);

那么答案就是1534了。

欢迎各位攻城狮,各位大牛给每日一题投稿,大家可以把自己碰到的有趣问题,工作中碰到的难题等…发送到 稿件邮箱:2313427189@qq.com