最近阅读了PHP数组相关实现原理的文章, 因为是hashTable链表的形式实现, 所以想用代码具体看一下对性能的影响, 测试了2,3组数据,不太满意, 就不贴出来分析了, 先贴代码, 后续还需要修改测试代码画曲线图来分析 说一下测试目的, 一个例子是通过取来说明PHP数
最近阅读了php数组相关实现原理的文章, 因为是hashtable+链表的形式实现, 所以想用代码具体看一下对性能的影响,
测试了2,3组数据,不太满意, 就不贴出来分析了, 先贴代码, 后续还需要修改测试代码画曲线图来分析
说一下测试目的, 一个例子是通过取值来说明PHP数组是通过链表遍历来进行随机访问的,性能和foreach应该差不多(事实说明前者快很多,可能是底层优化过), 第二个例子是说明foreach是链表遍历,for是随机访问的遍历,前者性能高于后者,这个测试结果与猜测相符.
商城购物系统是一个以php+MySQL进行开发的可塑性极强的电子商品平台;商城购物系统可自定义商品栏目内容,包含分销功能,分销管理、分销订单提成完整功能,商品加购物车、商品支付、商品发货等一系列流程,包括pc端和手机H5端。
0
<span><?php</span>
function getValueTest(){
//生成测试样本数组
require_once '../../include/Timer.cls.php';
$arr = array();
$n = 10000;
for ($i=1;$i<=$n;$i++){
$value = 'a'.$i;
$arr[$value] = $value;
}
$Timer = new Timer();
$tmp = '';
//比较取值的性能差异
//通过索引取值
$Timer->start();
for ($i=$n;$i>0;$i--){
$value = 'a'.$i;
$tmp = $arr[$value];
}
$Timer->stop();
$time1 = $Timer->getTime();
//通过遍历比较取值
$Timer->start();
for ($i=$n;$i>0;$i--){
$value = 'a'.$i;
foreach ($arr as $key => &$val){
if ($val == $value){
$tmp = $val;
break;
}
}
}
$Timer->stop();
$time2 = $Timer->getTime();
unset($val);
echo "time1 $time1 time2 $time2";
}
function compareWhile(){
//生成测试样本数组
require_once '../../include/Timer.cls.php';
$arr = array();
$n = 1000000;
for ($i=$n;$i>0;$i--){
$arr[$i] = $i;
}
$tmp = '';
//遍历性能比较
$Timer = new Timer();
$Timer->start();
for ($i=1;$i<=$n;$i++){
$tmp = $arr[$i];
}
$Timer->stop();
$time1 = $Timer->getTime();
$Timer->start();
foreach ($arr as $key => &$val){
$tmp = $val;
}
$Timer->stop();
$time2 = $Timer->getTime();
unset($val);
echo "time1 $time1 time2 $time2";
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号