Heim  >  Artikel  >  Backend-Entwicklung  >  Probleme mit der Effizienz der Funktionen PHP array_search und in_array

Probleme mit der Effizienz der Funktionen PHP array_search und in_array

藏色散人
藏色散人nach vorne
2019-10-17 13:41:503614Durchsuche

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 &#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);

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 &#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);

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen