Heim  >  Artikel  >  Backend-Entwicklung  >  Wie findet man effizient den ersten passenden Schlüssel in einem mehrdimensionalen PHP-Array?

Wie findet man effizient den ersten passenden Schlüssel in einem mehrdimensionalen PHP-Array?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 05:49:01915Durchsuche

How to Efficiently Find the First Matching Key in a Multidimensional PHP Array?

Eintauchen in die mehrdimensionale Array-Traversierung: Entdecken Sie den ersten passenden Schlüssel

Im Bereich der PHP-Programmierung kann die Traversierung mehrdimensionaler Arrays eine labyrinthische Aufgabe sein . Wenn Entwickler vor dem Ziel stehen, den mit dem ersten passenden Schlüssel verknüpften Wert abzurufen, stoßen sie möglicherweise auf rekursive Ansätze. Eine dieser unten beschriebenen Methoden stellt bei ihrer rekursiven Implementierung eine potenzielle Gefahr dar:

<br>private function find($needle, $haystack) {</p>
<pre class="brush:php;toolbar:false">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 &quot;did not find&quot;;

}

Diese Funktion zielt darauf ab, ein assoziatives Array rekursiv zu erkunden, den Schlüssel zu suchen, der mit der eingegebenen Nadel übereinstimmt, und seinen entsprechenden Wert zurückzugeben. Die Rekursion bleibt jedoch unvollständig, sodass die Frage unbeantwortet bleibt.

Modernes PHP für eine optimierte Lösung nutzen

In der sich ständig weiterentwickelnden PHP-Landschaft bieten neuere Versionen mehr effiziente und elegante Ansätze zur Array-Traversierung. Betrachten Sie das folgende Snippet, das auf PHP 5.6 und höher zugeschnitten ist:

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        return $value;
    }
}

}

Dieser modernisierte Code nutzt die Leistung von Generatoren, um den rekursiven Durchlaufprozess zu vereinfachen. Es iteriert nahtlos über alle Array-Elemente und filtert nach der Nadel, bevor es umgehend den entsprechenden Wert zurückgibt.

Erweiterung der Funktionalität mit Generatoren

Mit der Einführung von PHP 5.6 wurden Generatoren eingeführt, die die Leistung steigern Entwickler können aus rekursiven Suchvorgängen mehrere Treffer erzielen, nicht nur den ersten Treffer. Das folgende Snippet zeigt diese erweiterte Funktionalität:

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        yield $value;
    }
}

}

// Verwendung
foreach (recursiveFind($haystack, $needle) as $value) {

// Use `$value` here

}

Jetzt können Sie Iterieren Sie über alle übereinstimmenden Schlüssel-Wert-Paare, anstatt sich auf die erste Übereinstimmung zu beschränken. Dies erweitert die Vielseitigkeit der Funktion und ermöglicht einen umfassenderen Datenabruf aus mehrdimensionalen Arrays.

Das obige ist der detaillierte Inhalt vonWie findet man effizient den ersten passenden Schlüssel in einem mehrdimensionalen PHP-Array?. 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