首頁 >後端開發 >php教程 >colesafearray 深思 PHP 陣列遍歷的差異(array_diff 的實作)

colesafearray 深思 PHP 陣列遍歷的差異(array_diff 的實作)

WBOY
WBOY原創
2016-07-29 08:37:291201瀏覽

function array_diff($array_1, $array_2) {
    $diff = array();
    foreach  lag = false;
        foreach ($ array_2 as $v2) {
            if ($flag = ($v1 == $ c             }
        }
        if (!$flag)        if (!$flag) {
$diff[$k] = $v1;
        }
    }
    return $diff; function array_diff($array_1, $array_2) {
    foreach ($array_1 {
    foreach ($array_1 {
   item) {
        if (in_array($item, $array_2, true)) {
       }
    }
    return $array_1;
}嗯,這次幾乎可以跟原 array_diff 函數的速度媲美了。但是還有沒有更優化的方法呢?由 ChinaUnix 上的文章(不好意思,作弊了),我發現 PHP 竟然可以這樣寫:
function array_diff($array_1, $array_2) {
 >    foreach ($array_1 as $key => $item) {
        if (isset($array_2[$1 key]);
        }
}
    return $array_1;
}這個函數的效率非常的驚人,甚至比原 array_diff 函數的速度都要快。究其原因,我找到了解釋:
因為鍵是進行 HASH 組織的,查找很快;
而 Value 只是由 Key 組織存放,本身沒有索引,每次查找都是遍歷。總結
這雖然是 PHP 語言的一個小技巧,但在遍歷和對比數組的值上,如果需要對比值將其與鍵反轉的確比通常的值對值的比較效率要高得多。
例如,上面的函數二需要呼叫 in_array 函數需要循環判斷是否在函數內;而函數三則僅判斷這個陣列是否存在該鍵就可以了。加上數組鍵和值不同的組織索引方式,效率比想像的還高那就非常可以理解了。
附程式碼



複製程式碼

程式碼如下:


函數 microtime_float() {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
函數 array_diff2($array_1, $array_2) {
    $diff = array();
    foreach ($array_1 as $k => $v1) {
        $flag = false;
        foreach ($array_2 as $v2) {
                     break;
            }
        }
       k] = $v1;
        }
    }
    return $diff;
}
函數 array_diff3($array_1, $array_2) {
    foreach ($array_1 as  ) {
            未設定($array_1[$key]);
        }
    }
    return $array_1;
}
函數 array_diff4($array_1, $array_2) {
    $array_2 = array_flip($array_2);
    foreach ($array_1 as $key => $item) {
        if y_1[$key]);
        }
     }
    return $array_1;
}
//////////////////////////////
for($i = 0, $ary_1 =數組(); $i     $ary_1[] = rand(100, 999);
}
for($i = 0, $ary_2 = array(); $i     $ary_2[] =  {
    $ary_2[] = rand(100, 
}
header("內容類型:text/plain;charset=utf-8");
$time_start = microtime_float();
array_diff($ary_1, $ary_2);
echo「函數array_diff運行」。
array_diff2($ary_1, $ary_2);
echo「函數array_diff2運行」。
array_diff3($ary_1, $ary_2);
echo「函數array_diff3運行」。
array_diff4($ary_1, $ary_2);
echo「函數array_diff4運行」。
以上就介紹了colesafearray深思PHP批量處理的差異(array_diff的實現),包括了colesafearray方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn