php 求数组交集之优化
来源:互联网 发布:淘宝公司运营模式 编辑:程序博客网 时间:2024/06/05 04:45
网上流传的优化函数本人在使用的时候出现问题,做了一点改动,把原来的一个函数拆成两个,即 intersect()和 intersect_sub().
看下面的代码:
$rand = function() { $result = array(); for ($i = 0; $i < 100; null) { $value = mt_rand(1, 10000); if (!isset($result[$value])) { $result[$value] = null; $i++; } } return array_keys($result);};$param_a = $rand();$param_b = $rand();$time = microtime(true);$result = intersect($param_a, $param_b);$time = microtime(true) - $time;echo "intersect: {$time}<br/><br/><br/>";$time = microtime(true);$result = array_intersect($param_a, $param_b);$time = microtime(true) - $time;echo "array_intersect: {$time}\n";function intersect() { if (func_num_args() < 2) { trigger_error('param error', E_USER_ERROR); } $args = func_get_args(); foreach ($args AS $arg) { if (!is_array($arg)) { trigger_error('param error', E_USER_ERROR); } } $result = array_shift($args); sort($result); foreach ($args as $arg) { sort($arg); $result = intersect_sub($result, $arg); } return $result;}function intersect_sub($a, $b) { $result = array(); $length_a = count($a); $length_b = count($b); for ($i = 0, $j = 0; $i < $length_a && $j < $length_b; null) { if($a[$i] < $b[$j]) { $i++; } else if($a[$i] > $b[$j]) { $j++; } else { $result[] = $a[$i]; $i++; $j++; } } return $result; };
运行结果如下:
intersect: 0.0060269832611084array_intersect: 0.029041051864624从运行结果可以看出,优化后时间开销大约节省了4/5
- php 求数组交集之优化
- PHP数组交集的优化
- PHP数组交集的优化
- PHP使用array_intersect()函数求数组交集
- 求数组交集
- 数组求交集
- 有序数组求交集
- 求两个数组交集
- 数组求交集排序
- js数组求交集
- PHP求数组的差集和交集
- PHP对数组求交集,差集,并集示例
- 最快速度求两个数组之交集算法
- 计算机数学作业之求两个数组的交集问题
- 最快速度求两个数组之交集算法
- 宝典练习2之求两个数组的交集
- 最快速度求两个数组之交集算法与hash
- 数组之求两个sorted Array的交集
- Linux安装命令小结
- Response.ContentType 详细列表
- javascript 创建并关闭iframe
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- VIM+Cscope用法
- php 求数组交集之优化
- Linux系统备份
- 关于Linux Grep命令使用的详细介绍
- 今天看到C#高手进阶流程
- Linux文件系统及目录
- 配置有线和无线网络笔记linux欢迎大家拍砖
- Linux下tftp服务配置--简单笔记
- 雷军:确实真小米绝非伪苹果
- 设置vim语法高亮显示和自动缩进