假定每个参数会包含一千个左右的产品id(int),以此为前提来模拟生成一些数据:
注意:如果测试数据集过小的话,结论可能会出现不一致。
先看看通过php内置方法array_intersect实现的性能:
在优化之前,我们先来看看array_intersect一些特殊的地方:
array_intersect($param_a, $param_b): 1, 2, 2 array_intersect($param_b, $param_a): 1, 2也就是说,如果在第一个数组参数中有重复元素的话,则array_intersect会返回所有满足条件的重复元素。改写array_intersect的时候最好兼容这些功能。
下面看看通过自定义方法int_array_intersect实现的性能:
直觉上,我们肯定会认为内置函数快于自定义函数,但本例中结果恰恰相反:
array_intersect: 0.023918151855469 int_array_intersect: 0.0026049613952637为什么?原因在于int_array_intersect操作的都是整数,而array_intersect操作的都是字符串,如果你传给它整数,它会做一步耗时的『(string)』类型转换操作。
注:测试结果基于php5.3.5,不同版本结论可能存在差异
