foreach ($array_1 as $k => $v1) { $flag = false; foreach ($array_2 as $v2) { if ($flag = ($v1 == $v2)) " /> xx在线观看,伊人国产在线播放,国产系列在线亚洲视频

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

深思 PHP 數(shù)組遍歷的差異(array_diff 的實(shí)現(xiàn))

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;
}雖然實(shí)現(xiàn)是可以的,但是發(fā)現(xiàn)這個(gè)函數(shù)的效率是慘不忍睹。于是我又重新考慮了下,并優(yōu)化了算法,第二個(gè)函數(shù)看起來(lái)是這個(gè)樣子的:

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 函數(shù)的速度媲美了。但是還有沒(méi)有更優(yōu)化的辦法呢?由 ChinaUnix 上的一篇文章(不好意思,作弊了),我發(fā)現(xiàn) php 竟然可以這樣寫(xiě):

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;
}這個(gè)函數(shù)的效率非常的驚人,甚至比原 array_diff 函數(shù)的速度都要快。究其原因,我找到了解釋?zhuān)?

因?yàn)殒I是進(jìn)行 HASH 組織的,查找很快;
而 Value 只是由 Key 組織存放,本身沒(méi)有索引,每次查找都是遍歷。總結(jié)
這雖然是 php 語(yǔ)言的一個(gè)小竅門(mén),但在遍歷和對(duì)比數(shù)組的值上,如果需要對(duì)比值將其與鍵反轉(zhuǎn)的確比通常的值對(duì)值的比較效率要高得多。

比如,上面的函數(shù)二需要調(diào)用 in_array 函數(shù)需要循環(huán)判斷是否在函數(shù)內(nèi);而函數(shù)三則僅僅判斷這個(gè)數(shù)組是否存在該鍵就可以了。加上數(shù)組鍵和值不同的組織索引方式,效率比想象的還高那就非常可以理解了。

附代碼
復(fù)制代碼 代碼如下:
<?php
function microtime_float() {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function array_diff2($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_diff3($array_1, $array_2) {
    foreach ($array_1 as $key => $item) {
        if (in_array($item, $array_2, true)) {
            unset($array_1[$key]);
        }
    }

    return $array_1;
}


function array_diff4($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;
}

//////////////////////////////

for($i = 0, $ary_1 = array(); $i < 5000; $i++) {
    $ary_1[] = rand(100, 999);
}

for($i = 0, $ary_2 = array(); $i < 5000; $i++) {
    $ary_2[] = rand(100, 999);
}

header("Content-type: text/plain;charset=utf-8");

$time_start = microtime_float();
array_diff($ary_1, $ary_2);
echo "函數(shù) array_diff 運(yùn)行" . (microtime_float() - $time_start) . " 秒/n";

$time_start = microtime_float();
array_diff2($ary_1, $ary_2);
echo "函數(shù) array_diff2 運(yùn)行" . (microtime_float() - $time_start) . " 秒/n";

$time_start = microtime_float();
array_diff3($ary_1, $ary_2);
echo "函數(shù) array_diff3 運(yùn)行" . (microtime_float() - $time_start) . " 秒/n";

$time_start = microtime_float();
array_diff4($ary_1, $ary_2);
echo "函數(shù) array_diff4 運(yùn)行" . (microtime_float() - $time_start) . " 秒/n";
?>


php技術(shù)深思 PHP 數(shù)組遍歷的差異(array_diff 的實(shí)現(xiàn)),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 色戒西瓜视频 | 国内精品伊人久久久久 | 污漫日本E同人 | 国产精品自在自线亚洲 | 超碰人人澡人人胔 | 影音先锋av丝袜天堂 | 亚洲AV蜜桃永久无码精品无码网 | 中文字幕在线视频免费观看 | 野花韩国视频中文播放 | 欧美乱妇日本无乱码特黄大片 | 国产精品 中文字幕 亚洲 欧美 | 国产欧美一区二区精品仙草咪 | 国产精品嫩草影视在线观看 | 精品亚洲国产熟女福利自在线 | 极品内射少妇精品无码视频 | 国产精品女上位好爽在线短片 | 国产精品日本无码久久一老A | 国产互换后人妻的疯狂VIDEO | 精品久久中文字幕有码 | jizz黑丝| 久久极品视频 | 99re 这里只有精品 | 伊人久久网国产伊人 | 老师给美女同学开嫩苞 | 日本黄色网站在线观看 | 污污内射在线观看一区二区少妇 | 亚洲欧美日韩精品自拍 | 亚洲妈妈精品一区二区三区 | 99re久久热免费视频 | 偷窥自拍性综合图区 | 一边啪啪的一边呻吟声口述 | 快播在线电影网站 | a亚洲在线观看不卡高清 | 99久久国产露脸国语对白 | 亚洲高清视频免费 | 男男h开荤粗肉h文1v1 | 欧美白妞大战非洲大炮 | 芳草地社区在线视频 | 99久久久无码国产精品不卡按摩 | 97在线看视频福利免费 | 在线观看视频国产 |