Heim  >  Artikel  >  Backend-Entwicklung  >  2 angepasste PHP-in_array-Funktionen zur Lösung des Effizienzproblems bei der Beurteilung von in_array anhand großer Datenmengen

2 angepasste PHP-in_array-Funktionen zur Lösung des Effizienzproblems bei der Beurteilung von in_array anhand großer Datenmengen

高洛峰
高洛峰Original
2016-12-22 13:37:381393Durchsuche

Aber wenn das Array relativ groß ist, nimmt die Leistung ab und die Laufzeit wird länger. Wenn Sie also für große Arrays optimieren möchten, gibt es zwei Methoden (beide implementiert durch benutzerdefinierte Funktionen):

1. Drehen Sie den Array-Schlüssel und -Wert um und verwenden Sie isset, um zu bestimmen, ob der Schlüssel im Array vorhanden ist

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $flipArray = array_flip($array);
    return isset($flipArray[$item]);
}

Sie fragen sich vielleicht auch, warum array_key_exists nicht zur Beurteilung anstelle von isset verwendet wird? Schauen wir uns den Vergleich zwischen array_key_exists() und isset() an:
isset() gibt für NULL-Werte im Array nicht TRUE zurück, wohl aber array_key_exists().

<?php
$search_array = array(&#39;first&#39; => null, &#39;second&#39; => 4);
// returns false
isset($search_array[&#39;first&#39;]);
// returns true
array_key_exists(&#39;first&#39;, $search_array);
?>

2. Verwenden Sie implode, um eine Verbindung herzustellen, und verwenden Sie strpos direkt, um zu beurteilen.


Verwenden Sie die Funktion implode, um eine Verbindung herzustellen, und verwenden Sie strpos direkt zu urteilen. Die Zeichenfolgenpositionierung in PHP ist sehr schnell, insbesondere wenn die Datenmenge groß ist. Es ist jedoch zu beachten, dass am Anfang und am Ende ein „“ hinzugefügt werden muss, was strenger ist. Beispiel: ,user1,user2,user3, suchen Sie bei der Suche nach ,user1. Verwenden Sie auch strpos! == false, da der erste Wert 0 zurückgibt. Beispiele sind wie folgt:

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(&#39;,&#39;, $array);
    $str = &#39;,&#39; . $str . &#39;,&#39;;
    $item = &#39;,&#39; . $item . &#39;,&#39;;
    return false !== strpos($item, $str) ? true : false;
}


Weitere 2 angepasste PHP-in_array-Funktionen zur Lösung des Effizienzproblems bei der Beurteilung von in_array anhand großer Datenmengen. Bitte achten Sie darauf zur chinesischen PHP-Website!


Stellungnahme:
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