免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: AMD-K6

【原创】深思 PHP 数组遍历的差异(array_diff 的实现) [复制链接]

论坛徽章:
0
发表于 2008-01-03 15:07 |显示全部楼层
array_flip   如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。

论坛徽章:
0
发表于 2008-01-03 15:09 |显示全部楼层
所以用array_flip将会丢失数据

论坛徽章:
0
发表于 2008-03-05 11:54 |显示全部楼层
其实 array_flip() 也很慢的  而且比in_array()要慢得多, 和但是 array_flip()是在循环外面的 之执行一遍  而 in_array()要执行 5000多次 所以可以看出结果

论坛徽章:
0
发表于 2008-03-05 13:13 |显示全部楼层
array_flip() 丢失数据的话,那这样比较还是不行的

论坛徽章:
0
发表于 2008-03-27 10:27 |显示全部楼层
针对本题可以这么搞的啊,效率很高,但是如果第二个数组的value里有重复的值,LZ不就挂了啊。

论坛徽章:
0
发表于 2008-03-27 10:30 |显示全部楼层
抱歉,刚没看清楚,我错了。

论坛徽章:
0
发表于 2008-03-28 15:27 |显示全部楼层

回复 #1 AMD-K6 的帖子

把兄台的程序修改了一下,列出几组数据

1)
for($i = 0, $ary_1 = array(); $i < 5000; $i++) {
$ary_1[] = $i;
}

for($i = 0, $ary_2 = array(); $i < 5000; $i++) {
$ary_1[] = $i;
}

--------------------------------------------------------
函数 array_diff 运行0.338655948639 秒
函数 array_diff2 运行0.0425670146942 秒
函数 array_diff3 运行0.0321950912476 秒
函数 array_diff4 运行0.0265200138092 秒
-----------------------------------------------------------
2)

for($i = 0, $ary_1 = array(); $i < 5000; $i++) {
$ary_1[] = $i;
}

for($i = 0, $ary_2 = array(); $i < 5000; $i++) {
$ary_1[] = $i+5000;
}
--------------------------------------------------------------------
函数 array_diff 运行0.263401985168 秒
函数 array_diff2 运行0.0434989929199 秒
函数 array_diff3 运行0.0338242053986 秒
函数 array_diff4 运行0.0271499156952 秒

----------------------------------------------------------------------
3)

for($i = 0, $ary_1 = array(); $i < 5000; $i++) {
$ary_1[] = $i;
}

for($i = 0, $ary_2 = array(); $i < 5000; $i++) {
$ary_1[] = $i+2500;
}

--------------------------------------------------------------------

函数 array_diff 运行0.25840306282 秒
函数 array_diff2 运行0.0452589988708 秒
函数 array_diff3 运行0.0320010185242 秒
函数 array_diff4 运行0.0261788368225 秒

---------------------------------------------------
4)
for($i = 0, $ary_1 = array(); $i < 5000; $i++) {
   $ary_1[] = rand();
$ary_1[] = $i;
}

for($i = 0, $ary_2 = array(); $i < 5000; $i++) {
   $ary_2[] = rand();

}
--------------------------------------------------------------
函数 array_diff 运行0.287934064865 秒
函数 array_diff2 运行13.2373249531 秒
函数 array_diff3 运行0.944373130798 秒
函数 array_diff4 运行0.0226550102234 秒

论坛徽章:
0
发表于 2008-07-13 19:49 |显示全部楼层
不错,学习

论坛徽章:
0
发表于 2008-07-14 11:11 |显示全部楼层
恩?题目是让找差集,array_flip去掉重复的元素应该不是问题吧?

论坛徽章:
0
发表于 2008-07-14 11:49 |显示全部楼层
不要用foreach循环, for循环和数组迭代器会更快
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP