易截截图软件、单文件、免安装、纯绿色、仅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(gd库)输出中文图像的转换函数

http://linux.sheup.com/linux/linux4646.htm
GB2312->UTF-8 转换函数
以下是一段gb2312 -> UTF-8 的函数,西西,我抄了
unicode -> UTF-8 的算法,所以实际比GB2312->unicode
没多多少东西,请大家注意调用gb2utf8()时不能中英文混用
程序需要的GB2312.txt文件
gb2utf8.php
//Program writen by s ......

PHP交换数组中的元素和值

/*
author: yangyu@sina.cn
description: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子
*/
$arr = array(11=>'a',22=>'b',33=>'c',44=>'d');
$res = array_exchange($arr, 11 ,33);
//example:
echo '<pre>';print_r ($res);echo '</pre>';
function array_excha ......

PHP数据类型的转换

原文链接:http://www.phpdo.net/index.php/2010/02/09/1-12/
PHP的数据类型的转换有两种方法可以办到:直接输入目标的数据类型和通过settype函数实现。
PHP数据转换成整数
Float型数据转换成int型
Float型转换成int型,小数点后的数将被舍弃。如果float数超贵超过了整型的取值范围,那么结果可能是0或者是整形的最小负 ......

PHP函数的定义与使用

原文链接:http://www.phpdo.net/index.php/2010/02/10/1-13/
PHP中一个基本的脚本由两部分组成:主程序和函数。
函数不仅可以构成一个PHP脚本的基本功能,也使得程序结构化,有助于程序代码的重用。
PHP函数的调用
通过按照函数格式写出函数以及相应的参数即可,衣语法如下:
String substr(string str,int start) ......

Linux安装apache、php和mysql方法

apache的源码安装 
将压缩包解压之后进入相应的目录
./configure \   #--------------------预编译命令
"--prefix=/usr/local/apache" \  #--------------------安装路径为“/usr/local/apache”
"--with-included-apr" \
"--enable-so" \ #--------------------开启相应的扩展模块 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号