Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich den Wert des ersten passenden Schlüssels in einem mehrdimensionalen Array finden, wenn eine Rekursion beteiligt ist?

Wie kann ich den Wert des ersten passenden Schlüssels in einem mehrdimensionalen Array finden, wenn eine Rekursion beteiligt ist?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 11:43:27249Durchsuche

How can I find the value of the first matching key in a multidimensional array when recursion is involved?

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!

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