站長資訊網
        最全最豐富的資訊網站

        PHP array_search 和 in_array 函數效率問題

        問題

        在一個接口中,發現非常耗時,排查原因發現 array_search 查找數組中的元素的 key 時,效率隨著數組變大,耗時增加。特別是大數組時,非常耗時。在函數 in_array 也有這個問題。

        解決辦法

        采用 array_flip 翻轉后,用 isset 代替 in_array 函數,用 $array[key] 替代 array_search, 這樣能解決大數組超時耗時問題

        下面是我從 php 官網抄下來的筆記,可以觀察這兩個方法效率的差異

        原網址:https://www.php.net/manual/en/function.in-array.php

        If you're working with very large 2 dimensional arrays (eg 20,000+ elements) it's much faster to do this...
        $needle = 'test for this'; $flipped_haystack = array_flip($haystack); if ( isset($flipped_haystack[$needle]) ) {   print "Yes it's there!"; }
        I had a script that went from 30+ seconds down to 2 seconds (when hunting through a 50,000 element array 50,000 times). Remember to only flip it once at the beginning of your code though!

        更正

        有人提出意見說道,array_flip 效率比 in_array 和 array_search 高,做了一些實驗,確實如此。這點是我原來沒有考慮到問題。這個解決辦法,適用于多次使用 in_array 和 array_search 函數,才有效。下面是自己做實驗的結果。感謝 @木偶指出的問題

        <?php $array = array(); for ($i=0; $i<200000; $i++){     ##隨機字符串     $array[$i] = get_rand().$i; } $str = $array[150000]; $time1 = microtime(true); array_search($str, $array); $time2 = microtime(true); echo '原始方法:'.($time2-$time1)."n"; $time3 =  microtime(true); $new_array = array_flip($array); isset($new_array[$str]); $time4 = microtime(true); echo '新方法:'.($time4-$time3);

        結果:

        原始方法:0.0010008811950684 新方法:0.0069980621337891

        循環 5000 次

        $array = array(); for ($i=0; $i<200000; $i++){     ##隨機字符串     $array[$i] = get_rand().$i; } $str = $array[199999]; $time1 = microtime(true); for ($i=0; $i<5000; $i++){     array_search($str, $array); } $time2 = microtime(true); echo '原始方法:'.($time2-$time1)."n"; $time3 =  microtime(true); $new_array = array_flip($array); for ($i=0; $i<5000; $i++){     isset($new_array[$str]); } $time4 = microtime(true); echo '新方法:'.($time4-$time3);

        結果:

        原始方法:2.9000020027161 新方法:0.008030891418457

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久精品无码专区免费东京热| 无码日韩精品一区二区免费暖暖 | 亚洲国产精品自产在线播放| 久久国产精品久久久| 一本一道精品欧美中文字幕| 91精品国产福利在线观看| 黑人巨大精品欧美| 91久久精品国产91性色也| 国产综合色在线精品| 日本精品夜色视频一区二区| 91精品国产品国语在线不卡| 精品无码一区二区三区爱欲九九| 久久久91人妻无码精品蜜桃HD| 精品国产欧美另类一区| 久久久久久久久无码精品亚洲日韩| 精品国精品国产自在久国产应用男| 国产精品国产精品国产专区不卡| 久久国产成人精品国产成人亚洲| 久久精品九九亚洲精品天堂 | 国产精品高清在线| 亚洲精品午夜国产VA久久成人| 国内精品免费视频精选在线观看| 亚洲精品狼友在线播放| 久久精品国产只有精品66 | 人妻少妇看A偷人无码精品视频| 亚洲国产精品久久久久婷婷软件| 国产精品伦一区二区三级视频| 一本色道久久88—综合亚洲精品 | 亚洲AV永久无码精品成人| 亚洲国产精品自在线一区二区| 欧美精品久久久久久久自慰| 久久精品成人欧美大片| 亚洲精品综合一二三区在线 | 少妇人妻偷人精品视频| 免费精品久久久久久中文字幕| 91国内揄拍国内精品情侣对白| 国产精品久久自在自线观看| 国产麻豆精品一区二区三区v视界| 亚洲精品无码Av人在线观看国产| 亚洲精品美女久久久久99小说| 免费精品视频在线|