请看代码:

<?php

$a = 'asdasdasdasd';
var_dump(isset($a['somekey']));

上图这个代码, 在php5.3系统中会返回TRUE, 而php5.4会返回false, 我相信大家都会常常用isset来判断数组是否存在某个key. 这里的原理是, 如果$a是字符串, php5.3中会把somekey转为int, 也就是0, $a[0]也就等于字符’a’, 所以会返回TRUE, 这个问题在php5.4被修复了, 如果$a是字符串, 检测到key不是数字会返回false, 不会再强制转换…

所以在php5.3系统中, 最好这样判断

<?php

$a = 'asdasdasdasd';
var_dump(isset($a['somekey']));

if (is_array($a) && isset($a['somekey']))
    #some code....