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('first' => null, 'second' => 4); // returns false isset($search_array['first']); // returns true array_key_exists('first', $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(',', $array); $str = ',' . $str . ','; $item = ',' . $item . ','; 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!