问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php foreach、while性能比较

发布网友 发布时间:2022-04-07 05:49

我来回答

2个回答

懂视网 时间:2022-04-07 10:10

php中foreach和for的性能区别是什么?下面本篇文章给大家对比一下php中的for和foreach的性能,介绍一下foreach和for的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

php中for和foreach的性能对比

总体来说,如果数据库过几十万了,才能看出来快一点还是慢一点,如果低于10万的循环,就不用测试了。php推荐用foreach。

循环数字数组时,for需要事先count($arr)计算数组长度,需要引入自增变量$i,每次循环都要进行条件判断$i<$c,然后自增$i++,输出数组元素时,$arr[$i]需要进行哈希操作。

而foreach循环数组时,指针会自动指向下一个元素,不需要计算数组长度,没有条件判断和自增变量,调用元素时也没有哈希操作,所以性能肯定要比for和while高。

另外,for和while对存在键值映射的关联数组无能为力。所以,遍历数组,首选foreach。

foreach也是我PHP里最喜欢的关键字,因为它确实强大。array_map/array_filter/array_walk遍历数组的方式和foreach一样,但需要执行回调函数,所以也比foreach慢。

更多相关知识,请关注 PHP中文网!!

热心网友 时间:2022-04-07 07:18

foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。
在循环里进行的是数组“读”操作,则foreach比while快:
复制代码
代码如下:
foreach
($array
as
$value)
{
echo
$value;
}
while
(list($key)
=
each($array))
{
echo
$array[$key];
}
在循环里进行的是数组“写”操作,则while比foreach快:
复制代码
代码如下:
foreach
($array
as
$key
=>
$value)
{
echo
$array[$key]
=
$value
.
'...';
}
while
(list($key)
=
each($array))
{
$array[$key]
=
$array[$key]
.
'...';
}
总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很
快的,这是因为PHP采用的复制机制是“引用计数,写时复制”,也就是说,即便在PHP里复制一个变量,最初的形式从根本上说其实
仍然是引用的形式,只有当变量的内容发生变化时,才会出现真正的复制,之所以这么做是出于节省内存消耗得目的,同时也提升了
复制的效率。这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结
论,多数情况下,类似foreach
($array
as
$key
=>
$value)形式的做数组写操作得代码都应该被替换成while
(list($key)
=
each($array))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几
百几千几万次数组循环操作,差异就会明显放大。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成年人上睑下垂的常见原因 警惕!总是睡眼惺忪,可能是上睑下垂惹的祸 为什么会上眼睑下垂?是什么引起了上眼睑下垂? 上眼睑下垂原因 excel里怎么在一行里换行 excel 自动换行怎么操作 表格中自动换行快捷键excel自动换行怎么操作 excel怎么换行 excel自动换行和手动换行方法介绍 ...考试可以不参加吗-高三一模不考对高考有影响吗 3的5倍是(),例式怎么写? 电脑声卡更新后,耳机插入后面板没声音,但前面板有声音,是怎么回事? 用驱动精灵更新了声卡耳机却没声音怎么办 我把声卡升级后耳机就没声音了,音响有,怎么回事? 声卡耳机没声音怎么办 升级的声卡驱动,也重启了很多遍,没声音了,确定耳机是没问题的,设置这样子不对吗? 2021年山东物理高考40分如何赋分 山东物理50分能赋分到多少 山东高考历地政怎付分 化学考50分赋分多少 2021年山东高考政治考了9分赋多少分 thinkphp foreach 和for的区别 山东高考2020物理47分,化学56分,生物70分,大概各科能赋分到多少? 山东地理60分能赋分到多少 2020山东高考原始分对应赋分 高考赋分是怎么算的? 山东高考赋分制是怎么定的? 手机被盗,别人用我的手机实名认证了oppo账号怎么办,人工客服能查出实名认证的? php循环语句 for与foreach用法区别介绍 021开头电话提供小额贷款 TCL冰箱冷冻正常,冷藏不工作是何故? 台湾人用什么证件可以在大陆预定高铁票吗? 在哪订台湾高铁票 台湾高铁怎么买票? 求问台湾的高铁票或者是火车票怎么买 台湾人用什么证件可以在大陆预定高铁票吗 如何定台湾高铁早鸟票 怎样能买到台湾高铁早鸟票? 月见花好样么 请问台湾的高铁票或者台铁票需要提前网上预定吗? 台湾的高铁,台铁一定需要提前网上买票吗 台湾高铁票用护照定了票要用护照去取吗 月见草可以家养吗? 台湾自由行需要提前预订高铁票吗 台湾高铁 携程订的台湾高铁票 一定要去选定取票门市拿吗?我定的是桃园到左营的 准备下飞机直接去 但是取票门 大花月见草适合室内盆养吗 台湾火车票预定 月见草几天浇一次? 我想在台湾高铁官网上面买票,但是打不开24小时购票网页怎么办? 全自动导航车的管理维护工作怎么样?