Array_key_exists ($ key, $ array) wird verwendet, um zu prüfen, ob der angegebene $ -Key in $ array vorhanden ist. Rückgabe true, wenn $ key existiert, sonst falsch .
Der Vorteil dieser Funktion besteht darin, dass sie alle Schlüssel im Array berücksichtigt, unabhängig davon, ob der Wert null oder falsch ist und korrekt beurteilt werden kann. Zum Beispiel:
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">0</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'b'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'c'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>Wenn Sie Array_key_exists häufig in einer Schleife aufrufen, kann dies negativ auf die Leistung auswirken, insbesondere wenn Sie sich mit großen Arrays befassen. Die Gründe sind wie folgt:
Zeitkomplexität der Suchvorgänge : Die Zeitkomplexität der Suchvorgänge für Array_key_exists ist O (1), was bedeutet, dass die Effizienz bei jeder Nachsicht konstant ist. Wenn Sie jedoch mehrere Anrufe in einer Schleife tätigen, kann sich diese konstante Zeit ansammeln, insbesondere wenn die Anzahl der Schleifen sehr groß ist.
Wiederholen Sie dieselben Tasten : Wenn Sie in einer Schleife mehrere existierende Existenzprüfungen auf demselben Array durchführen, führt PHP diese Überprüfungen wiederholt durch und verschwendet unnötige Rechenressourcen.
Zum Beispiel:
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)) {
</span><span><span class="hljs-comment">// Bestimmte Aktionen ausführen</span></span><span>
}
}
</span></span>Im obigen Code werden Array_key_exists jedes Mal aufgerufen, wenn die Schleife und in diesem bestimmten Szenario $ Key im Array vorhanden sein muss, sodass diese Prüfung überflüssig ist.
Als Reaktion auf die oben genannten Leistungsprobleme werden nachstehend mehrere Optimierungslösungen vorgeschlagen.
Wenn Sie bereits wissen, dass die Schlüssel des Arrays existieren, müssen Sie überhaupt nicht erneut überprüfen. Sie können beispielsweise den $ -Kaste in der Schleife verwenden, ohne array_key_exists aufzurufen.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// Direkt verwenden $key,Vermeiden Sie es, anzurufen array_key_exists</span></span><span>
</span><span><span class="hljs-comment">// Bestimmte Aktionen ausführen</span></span><span>
}
</span></span>Wenn Sie die Existenz mehrerer Schlüssel in einer Schleife überprüfen müssen, können Sie zuerst alle Schlüssel des Arrays außerhalb der Schleife abrufen und sie dann gleichzeitig über In_array oder andere Methoden überprüfen. Dies vermeidet mehrere Anrufe bei array_key_exists .
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>); </span><span><span class="hljs-comment">// Holen Sie sich alle Schlüssel</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$keys</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span>) {
</span><span><span class="hljs-comment">// Kann direkt betrieben werden $array[$key]</span></span><span>
}
</span></span>ISSET () ist eine häufig verwendete Funktion, die normalerweise verwendet wird, um zu überprüfen, ob der Wert in einem Array null oder undefiniert ist. Wenn Sie sich nur darum kümmern, ob der Schlüssel existiert und der Wert nicht null ist, ist die Verwendung von ISSET () effizienter als Array_key_exists , da Isset () direkt überprüft, ob der Array -Wert festgelegt ist, und Array_key_exists prüft, ob der Schlüssel vorhanden ist, und berücksichtigt sogar den Nullwert .
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>])) {
</span><span><span class="hljs-comment">// Bestimmte Aktionen ausführen</span></span><span>
}
}
</span></span>In einigen besonderen Szenarien ist das Leistungsproblem möglicherweise nicht nur ein Problem von Array_key_exists , sondern mit der Auswahl der Datenstruktur selbst. In diesem Fall können Sie in Betracht ziehen, andere Datenstrukturen wie SplabjectStorage oder andere Hash -Tabellen zu verwenden, die in Bezug auf die Leistung besser abschneiden können.
Obwohl Array_key_exists eine sehr praktische Funktion ist, können häufige Aufrufe in einer Schleife die Leistung beeinflussen. Durch Vermeiden von wiederholten Überprüfungen, das Extrahieren von Schlüssel im Voraus, die Auswahl geeigneter Funktionen (z. B. ISSET ) und die Verwendung geeigneter Datenstrukturen kann die Ausführungseffizienz des PHP -Codes effektiv verbessert werden. In der tatsächlichen Entwicklung ist es wichtig, die optimale Lösung basierend auf dem spezifischen Anwendungsszenario auszuwählen, um sicherzustellen, dass das Programm bei der Verarbeitung großer Datenmengen effizient bleibt.