看到andot的hprose中有使用array_key_exists,就想问为什么不用isset,再一想哦。isset不能判断$a['xxx'] = null的情况。这时候看了一下评论,有人建议用isset() || array_key_exists来辅助判断,说是性能有大提升。
于是写了点代码测试,果然:
XML/HTML代码
- count array: 999900 ; loop :100000
- $array['109011'] = 109011;
- 1. array_key_exists(109011,$array);
- bool(true)
- 0.021718
- 2. isset($array['109011']);
- bool(true)
- 0.004888
- 3. isset( $array['109011'] ) || array_key_exists( '109011', $array )
- bool(true)
- 0.005100
- count array: 999900 ; loop :100000
- $array['109011'] = null;
- 1. array_key_exists(109011,$array);
- bool(true)
- 0.026091
- 2. isset($array['109011']);
- bool(false) //注意看这里
- 0.006697
- 3. isset( $array['109011'] ) || array_key_exists( '109011', $array )
- bool(true)
- 0.026621
基本上,在$a['x'] 不是null的情况下,性能提升4倍左右 ,如果该值是null,这损耗可以接受。
数组长度是999900,循环100000次
所以以后代码还是 isset($a[$key])||array_key_exists($key,$a) 比较好。
当然,如果你平时处理isset($_GET['xxx'])的时候,不需要用array_key_exists的,因为URL中都是string