今天遇到一个case,随手记一下:
代码中有一个逻辑是使用array_search查找数组中是否存在指定的key,存在的话就把它删除掉:
$index = array_search('a', $array);
unset($array[$index]);
执行过程中发现,有时候会把不应该删除的元素删掉,排查后发现,当array_search没有找到待查元素时会返回false,布尔值的key会被转换为整形,因此就把$array[0]删除掉了。
PHP手册中相关内容如下:
(数组的)key 可以是 integer 或者 string。value 可以是任意类型。
此外 key 会有如下的强制转换:
包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
以后要多多注意代码中的特殊情况。
网友评论