真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php中的for和foreach循環(huán)哪個(gè)更好i

1、作為一名phper,for和foreach循環(huán)遍歷幾乎每天都在使用,那么這兩種遍歷方式哪一種效率更高呢?

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、網(wǎng)站建設(shè)、長(zhǎng)島網(wǎng)絡(luò)推廣、微信小程序、長(zhǎng)島網(wǎng)絡(luò)營(yíng)銷、長(zhǎng)島企業(yè)策劃、長(zhǎng)島品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供長(zhǎng)島建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

2、效率高的原因是什么呢?

3、原理分別是什么呢?

首先要解決第一個(gè)問(wèn)題,我們可以通過(guò)一個(gè)簡(jiǎn)單的測(cè)試看一下測(cè)試結(jié)果,測(cè)試代碼如下:

for循環(huán)遍歷方法:

public function getForTime(){
    $big_Array = range(0,1000000,1);
     /* for循環(huán)遍歷數(shù)組示例 */
    $start_For_Time = $this->microtime_float();
    //$array_Count = count($big_Array);
    for ($i=0;$imicrotime_float();
    $for_Time = $end_For_Time - $start_For_Time;
    echo 'for循環(huán)遍歷耗時(shí):'.$for_Time.'
'; }

foreach循環(huán)遍歷方法:

public function getForeachTime(){
$big_Array = range(0,1000000,1);
 /* foreach循環(huán)遍歷數(shù)組示例 */
    $start_Foreach_Time = $this->microtime_float();
    foreach ($big_Array as $key=>$val) {
            $key;
    }
    $end_Foreach_Time = $this->microtime_float();
    $foreach_Time = $end_Foreach_Time - $start_Foreach_Time;
    echo 'foreach循環(huán)遍歷耗時(shí):'.$foreach_Time;
}

時(shí)間計(jì)算方法:

/**
 *  時(shí)間統(tǒng)計(jì)函數(shù)
 */
private function microtime_float($time = null)
{
   list($usec, $sec) = explode(' ', $time ? $time : microtime());
   return ((float)$usec + (float)$sec);
}

看一下兩種方式耗時(shí)

/*
 * 輸出結(jié)果:第一種情況:先count在for循環(huán)遍歷耗時(shí):0.028002023696899 秒
 *                         foreach循環(huán)遍歷耗時(shí):0.003000020980835 秒
 *        第二種情況:在for循環(huán)條件中做count遍歷耗時(shí):0.095005035400391 秒
 *                            foreach循環(huán)遍歷耗時(shí):0.0040009021759033 秒
 * */

從上面的測(cè)試中我們可以明顯的得出兩條結(jié)論:

1、for循環(huán)遍歷的效率是低于foreach循環(huán)遍歷
2、for循環(huán)在外部做count和在條件中做count相比較,第一種效率更高

那么第二個(gè)問(wèn)題:效率高的原因是什么呢?在尋找這個(gè)答案之前我們先探討第三個(gè)問(wèn)題,我們看一下原理分別是什么。

for 循環(huán):

每次從$i開始,每次循環(huán)都需要判斷$i是否小于count,這占用了很大一部分時(shí)間

小于繼續(xù),否則終止循環(huán)

foreach:

foreach 依賴 IEnumerable.
第一次 var a in GetList() 時(shí) 調(diào)用 GetEnumerator 返回第一個(gè)對(duì)象 并 賦給a,
以后每次再執(zhí)行 var a in GetList() 的時(shí)候 調(diào)用 MoveNext.直到循環(huán)結(jié)束.
期間GetList()方法只執(zhí)行一次.
從上面是分析我們明顯可以得出結(jié)論:php 的foreach循環(huán)效率是大大高于for循環(huán)。

BUT:事實(shí)真的是這樣嗎?有人會(huì)說(shuō)這個(gè)例子已經(jīng)很明顯了啊,結(jié)論一目了然,難道還有其他的可能嗎?

我覺(jué)得事實(shí)沒(méi)這么簡(jiǎn)單,如果真的是這樣,for循環(huán)存在的意義是什么呢?

既然foreach效率高于for這么多倍,就直接都用foreach不就行了嗎?個(gè)人覺(jué)得我測(cè)試的這個(gè)例子有一定的局限性,并不能作為評(píng)估兩個(gè)循環(huán)方式效率高低的絕對(duì)依據(jù)。

不過(guò),對(duì)于我們phper來(lái)說(shuō),正常工作當(dāng)中還是使用foreach循環(huán)遍歷比較好,至于編譯層是如何工作的沒(méi)必要涉及太深,如果有興趣可以深度研究一下。

以下是網(wǎng)友回復(fù):

for存在的意義是因?yàn)橛幸恍┣闆r是foreach不好實(shí)現(xiàn)的,具體的你可以看一看Effective Java的第46條,雖然你是做php的,但基本都是相通的吧!書里面推薦使用foreach模式,但是有以下三種情況不合適: 1. 過(guò)濾-如果需要在集合上遍歷且移去選定的元素,就要使用顯式的迭代,并調(diào)用它的remove方法。 2. 轉(zhuǎn)換-如果需要在list或數(shù)組上遍歷且要替換部分或所有的元素值,則需要list的迭代器或數(shù)組的索引去設(shè)置這些值。 3. 平行迭代-如果需要并行的遍歷多個(gè)集合,則需要顯式的控制迭代器或索引變量,以便所有的迭代器或索引能協(xié)同推進(jìn) 然后for和foreach在性能上貌似遍歷不一樣的數(shù)據(jù)會(huì)有不一樣的性能差別,比如鏈表或者數(shù)組,這個(gè)也是我最近有所疑惑的。

以上就是for和foreach哪個(gè)效率更高?為什么?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


網(wǎng)頁(yè)名稱:php中的for和foreach循環(huán)哪個(gè)更好i
標(biāo)題鏈接:http://weahome.cn/article/gchjcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部