php中的in_array()性能

三一重工的提奖系统14年政策又下来了,今年的政策改动还是有的。里面逻辑较复杂,当然,我们心里也复杂。

晚上在看公式类时,发现当IF过长时,折叠起来就麻烦了,有些语句块由于要换行,所以折叠不起来。于是在群里和大家讨论IDE折叠功能。贴出了一些代码,有同学就说了,很多if($a==’ab’ || $a==’ac’ || $a==’ad’)  这种代码应该用 in_array 来组织。

其实不然,虽然用in_array组织代码后看起来精简了,但是 in_array是类似链表遍历搜索,复杂度是O(n) ,而 if中的 || 是短路操作,这样看来, in_array 在特定情况下性能并不高。所以在这种系统中,能用 if 配合短路判断的就尽量用if吧。

总结:PHP Array的KEY是进行HASH组织的,查询很快;而VALUE是由KEY组织存放,本身没有索引,每次查找都是遍历。从优化角度分析,如果待查找数组很大,isset()的效率要远高于array_key_exists()。

发布者:天南

一个好人

留下评论

电子邮件地址不会被公开。 必填项已用*标注