易截截图软件、单文件、免安装、纯绿色、仅160KB

深思 PHP 数组遍历的差异(array_diff 的实现)

还是
部门无聊的考题,不过这次考的是 PHP
的能力。题目如下:
给你两个分别有 5000 个元素的数组,计算他们的差集
-- 说白了也就是用 PHP 和你认为最好的算法实现 array_diff 的算法。
初次接到这个题目,我发现这非常的简单,
于是按照以往的经验“随便”写了一个:
function array_diff($array_1, $array_2) {
$diff = array();
foreach ($array_1 as $k => $v1) {
$flag = false;
foreach ($array_2 as $v2) {
if ($flag = ($v1 == $v2)) {
break;
}
}
if (!$flag) {
$diff[$k] = $v1;
}
}
return $diff;
}
虽然实现是可以的,但是发现这个函数的效率是惨不忍睹。于是我又重新考虑了下,并优化了算法,第二个函数看起来是这个样子的:
function array_diff($array_1, $array_2) {
foreach ($array_1 as $key => $item) {
if (in_array($item, $array_2, true)) {
unset($array_1[$key]);
}
}
return $array_1;
}
嗯,这次几乎可以和原 array_diff 函数的速度媲美了。但是还有没有更优化的办法呢?由 ChinaUnix 上的一篇文章
(不好意
思,作弊了),我发现 PHP 竟然可以这样写:
function array_diff($array_1, $array_2) {
$array_2 = array_flip($array_2);
foreach ($array_1 as $key => $item) {
if (isset($array_2[$item])) {
unset($array_1[$key]);
}
}
return $array_1;
}
这个函数的效率非常的惊人,甚至比原 array_diff 函数的速度都要快。究其原因,我找到了解释:
因为键是进行 HASH 组织的,查找很快;
而 Value 只是由 Key 组织存放,本身没有索引,每次查找都是遍历。
总结
这虽然是 PHP
语言的一个小窍门,但在遍历和对比数组的值上,如果需要对比值将其与键反转的确比通常的值对值的比较效率要高得多。
比如,上面的函数二需要调用 in_array
函数需要循环判断是否在函数内;而函数三则仅仅判断这个数组是否存在该键就可以了。加上数组键和值不同的组织索引方式,效率比想象的还高那就非常可以理解
了。
附,测试连接在这里
(打包下载
)。如
对 Javascript 数组方面的讨论感兴趣,可以点击这里


相关文档:

PHP编译配置和配置文件说明


PHP安装配置说明
一、软件下载
PHP5.3.0:http://cn2.php.net/get/php-5.3.0.tar.gz/from/this/mirror
Pear:http://de.pear.php.net/get/PEAR-1.9.0.tar
Mm:ftp://ftp.ossp.org/pkg/lib/mm/mm-1.4.2.tar.gz
二、环境检查
已安装Apache2.2.13(/usr/local/apache/),mm-1.4.2(/usr/local/mm/)
rpm -qa|grep mcrypt ......

php我的菜鸟入门经历

年底了,本来打算提前一周请假回家的,领导也批了,但是临时又有了任务,需要在年前搭一个演示系统,于是被扣下了。。
需要做一个多机通信的系统,我这边的任务大概就是需要管理员用户能对数据库内容进行编辑,并且通过服务器中转程序与客户用户程序通信。总共也没多少工作量,和几个开发人员简单的商讨了一下,确定了大体 ......

PHP MEMCACHE 详解(经典php缓存)

Memcache函数库是在 PECL(PHP Extension Community Library)中,主要作用是搭建大容量的内存数据的临时存放区域,在分布式的时候作用体现的非常明显,否则不建议使用。
Memcache Win32 的安装和PHP中的配置
下载:Memcache Win32
www.php100.com   www.jehiah.cz/projects/memcached-win32/
1、解压到目录: ......

Linux安装apache、php和mysql方法

apache的源码安装 
将压缩包解压之后进入相应的目录
./configure \   #--------------------预编译命令
"--prefix=/usr/local/apache" \  #--------------------安装路径为“/usr/local/apache”
"--with-included-apr" \
"--enable-so" \ #--------------------开启相应的扩展模块 ......

一些被忽视的 PHP 函数(整理)


到这篇文章
,当时就泪奔了好几回,重点推荐下,顺便我自己也做个整理。
sys_getloadavg()
这个函数
返回当前系统的负载均值信息
(当然 Windows
下不适用),详细文档可以翻阅 PHP 的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。
<?php
$load = sys_getloadavg();
if ($load[0] > 80) ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号