Abrufen des Werts des ersten passenden Schlüssels in einem mehrdimensionalen Array: Bewältigung von Rekursionsproblemen
In der Softwareentwicklung das Navigieren in mehrdimensionalen Arrays und die Suche nach Das Erstellen bestimmter Schlüssel ist eine häufige Aufgabe. Wenn es jedoch um Rekursion geht, kann es schwierig werden. Lassen Sie uns den folgenden Codeausschnitt analysieren, der darauf abzielt, den mit einem passenden Schlüssel verknüpften Wert zu finden:
<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>
Das Problem liegt in der Rekursion selbst. Beim Auffinden eines Arrays im Heuhaufen wird die Dateivariable zum neuen Heuhaufen. Der Verweis auf den ursprünglichen Heuhaufen geht jedoch verloren, was möglicherweise zu einem ewigen Rekursionszyklus führt.
Um dieses Problem zu beheben, ziehen Sie die folgenden Lösungen in Betracht:
RecursiveIteratorIterator
PHP 5.6 und höher führt RecursiveIteratorIterator ein, was die Aufgabe erheblich vereinfacht:
<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>
Dieser Ansatz nutzt einen RecursiveArrayIterator, der das Array durchläuft, und einen RecursiveIteratorIterator, der alle Elemente, einschließlich verschachtelter Arrays, effizient durchläuft.
Generatorbasierte Funktion
Für PHP 5.6 und neuer können Sie Generatoren verwenden, um alle übereinstimmenden Werte abzurufen:
<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; } } }</code>
Diese Funktion gibt zurück Abgleichen von Werten mithilfe des Schlüsselworts yield, sodass Sie sie alle mit einer foreach-Schleife durchlaufen können.
Das obige ist der detaillierte Inhalt vonWie kann ich den Wert des ersten passenden Schlüssels in einem mehrdimensionalen Array finden, wenn eine Rekursion beteiligt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!