Durchsuchen mehrdimensionaler Arrays nach übereinstimmenden Schlüsselwerten
Beim Durchsuchen mehrdimensionaler Arrays auf der Suche nach einem bestimmten Schlüssel und seinem entsprechenden Wert kommt es häufig vor, dass dieser auftritt Rekursionsprobleme. Betrachten Sie die folgende Beispielmethode:
<code class="php">private function find($needle, $haystack) { foreach ($haystack as $name => $file) { if ($needle == $name) { return $file; } else if(is_array($file)) { //is folder return $this->find($needle, $file); //file is the new haystack } } return "did not find"; }</code>
Diese Methode zielt darauf ab, einen Schlüssel innerhalb eines assoziativen Arrays zu finden und den zugehörigen Wert zurückzugeben. Es gibt jedoch ein potenzielles Problem mit dem rekursiven Ansatz.
Um dieses Problem zu lösen, kann eine modernere und effizientere Lösung unter Verwendung der neueren Funktionen von PHP eingesetzt werden:
<code class="php">function recursiveFind(array $haystack, $needle) { $iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { return $value; } } }</code>
Diese Methode nutzt Rekursion und Iteratoren um das Array effizient zu durchlaufen und den ersten passenden Schlüssel zu finden.
Alternativ können Sie die Generatoren von PHP 5.6 verwenden, wenn Sie über alle Übereinstimmungen statt nur über den ersten iterieren möchten:
<code class="php">function recursiveFind(array $haystack, $needle) { $iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { yield $value; } } } // Usage foreach (recursiveFind($haystack, $needle) as $value) { // Use `$value` here }</code>
Mit diesem Ansatz können Sie elegant über alle übereinstimmenden Werte im Array iterieren.
Das obige ist der detaillierte Inhalt vonWie kann man in PHP effizient nach Schlüsselwerten in mehrdimensionalen Arrays suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!