Heim > Artikel > Backend-Entwicklung > Probleme mit der Effizienz der Funktionen PHP array_search und in_array
Problem
In einer Schnittstelle wurde festgestellt, dass es sehr zeitaufwändig war. Nach der Untersuchung der Ursache wurde festgestellt, dass array_search nach dem Schlüssel eines Elements sucht Bei einem Array steigt die Effizienz mit zunehmender Größe des Arrays und der Zeitaufwand nimmt zu. Insbesondere bei großen Arrays ist dies sehr zeitaufwändig. Dieses Problem besteht auch bei der Funktion in_array.
Lösung
Verwenden Sie nach dem Umdrehen von array_flip die Funktion isset anstelle der Funktion in_array und verwenden Sie $array[key] anstelle von array_search. Dies kann das zeitaufwändige Problem lösen große Arrays
Das Folgende sind die Notizen, die ich von der offiziellen PHP-Website kopiert habe. Sie können den Unterschied in der Effizienz zwischen den beiden Methoden beobachten
Original-Website: 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!"; }rrree
Korrektur
Jemand hat gesagt, dass array_flip effizienter ist als in_array und array_search Experimente, das stimmt. Das ist etwas, woran ich ursprünglich nicht gedacht habe. Diese Lösung ist nur gültig, wenn die Funktionen in_array und array_search mehrmals verwendet werden. Nachfolgend finden Sie die Ergebnisse meiner eigenen Experimente. Danke @puppet für den Hinweis auf das Problem
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!
Ergebnis:
<?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);
5000-malige Schleife
原始方法:0.0010008811950684 新方法:0.0069980621337891
Ergebnis:
$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);
Das obige ist der detaillierte Inhalt vonProbleme mit der Effizienz der Funktionen PHP array_search und in_array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!