Probleme mit der Effizienz der Funktionen PHP array_search und in_array

藏色散人
Freigeben: 2023-04-07 17:28:01
nach vorne
3682 Leute haben es durchsucht

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...
Nach dem Login kopieren
$needle = 'test for this';
$flipped_haystack = array_flip($haystack);
if ( isset($flipped_haystack[$needle]) )
{
  print "Yes it's there!";
}
Nach dem Login kopieren
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!
Nach dem Login kopieren

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 &#39;原始方法:&#39;.($time2-$time1)."\n";
$time3 =  microtime(true);
$new_array = array_flip($array);
isset($new_array[$str]);
$time4 = microtime(true);
echo &#39;新方法:&#39;.($time4-$time3);
Nach dem Login kopieren

5000-malige Schleife

原始方法:0.0010008811950684
新方法:0.0069980621337891
Nach dem Login kopieren

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 &#39;原始方法:&#39;.($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 &#39;新方法:&#39;.($time4-$time3);
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage