激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 淺談PHP array_search 和 in_array 函數效率問題

淺談PHP array_search 和 in_array 函數效率問題

2021-09-03 16:14jiangjun PHP教程

這篇文章主要介紹了淺談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...

?
1
2
3
4
5
6
7
8
$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!

--------------------2019-10-14 更新 ----------------------

更正

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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 次

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://learnku.com/laravel/t/34826

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品久久久久久久 | 久草最新在线 | 夜间福利网站 | 久久国产精品影视 | 久久成人综合视频 | 亚洲一区 国产精品 | 黄色毛片a级 | 日韩激情一区二区三区 | 99国产精品国产免费观看 | 国产伊人色 | 欧美日韩亚洲视频 | 国产精品免费一区二区三区都可以 | 91麻豆精品国产91久久久无需广告 | 国产午夜精品理论片a级探花 | 国产手机av在线 | 亚洲视频在线观看免费 | 欧美一级爱爱 | 国产一区二区午夜 | 欧美黄一级 | 久久免费视频7 | 欧美一级黄色片在线观看 | 免费一级特黄做受大片 | 九九热精| 国产精品视频中文字幕 | 日本不卡一区二区三区在线 | 久久逼逼| 久久久久久久爱 | 成人不卡在线观看 | 特级黄色影院 | 色女人在线 | 久久精品中文字幕 | av在线免费观看网 | 黄色二区三区 | 亚洲小视频在线播放 | 黄色18网站| 国产91免费看 | 欧美69free性videos | 午夜精品久久久久久久久久久久久蜜桃 | 伊人在线 | 免费黄色一级网站 | 免费观看9x视频网站在线观看 |