深入探讨array_map、foreach、for循环处理数组的效率


array_map的使用

<?php
    header('content-type:text/html;charset=utf-8');
    //生命一个计算脚本运行时间的类
    class Timer{
        private $startTime = 0; //保存脚本开始执行时的时间(以微秒的形式保存)
        private $stopTime = 0; //保存脚本结束执行时的时间(以微秒的形式保存)


        //在脚本开始处调用获取脚本开始时间的微秒值
        function start(){
            $this->startTime = microtime(true); //将获取的时间赋值给成员属性$startTime
        }


        //脚本结束处嗲用脚本结束的时间微秒值
        function stop(){
            $this->stopTime = microtime(true); //将获取的时间赋给成员属性$stopTime
        }


        //返回同一脚本中两次获取时间的差值
        function spent(){
            return $this->stopTime - $this->startTime;
        }
    }


    $timer= new Timer();
    $array = range(1, 100000);


    $timer->start(); //在脚本文件开始执行时调用这个方法
    //每个数组的元素都加1
    //方法一:array_map
    $result = array_map(function($val){
        return $val+1;
    }, $array);
    $timer->stop(); //在脚本文件结束处调用这个方法


    echo "运用array_map处理数组时用了<b>".$timer->spent()."</b>秒<br>";

 foreach的使用
foreach ($array as $key => &$value) {
        $value += 1;
    }
    $timer->stop(); //在脚本文件结束处调用这个方法
    
    echo "运用foreach处理数组时用了<b>".$timer->spent()."</b>秒<br>";

for的使用
    for($i = 0;$i < count($array);$i++){
        $array[$i] += 1;
    }
    // echo "<pre>";
    // print_r($array);
    // echo "</pre>";
    $timer->stop(); //在脚本文件结束处调用这个方法
    echo "运用for处理数组时用了".$timer->spent()."秒";


    结果:(纠正下,耗时单位:秒,不是微秒)


从中发现,array_map的速度最快,很多PHP框架中都使用它来循环处理函数,但是这并不能说array_map的效率是最高的,这跟PHP的版本、循环部分的业务逻辑有关,相对来说array_map的时间比较稳定,如果只是遍历展示数组,foreach应该是最快的,还有foreach只是个语言结构,不是函数。

个人理解观点,希望大家批评指正!


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值