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

Barbara Streisand
Freigeben: 2024-10-31 05:49:01
Original
851 Leute haben es durchsucht

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;;
Nach dem Login kopieren

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
    }
}
Nach dem Login kopieren

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
    }
}
Nach dem Login kopieren

}

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

// Use `$value` here
Nach dem Login kopieren

}

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!

Quelle:php.cn
Vorheriger Artikel:Warum kann ich „vendor/autoload.php“ nicht finden: Eine Anleitung zur Behebung von Composer-Autoload-Fehlern Nächster Artikel:Wie überprüfe ich, ob eine Zeichenfolge in PHP mit einer bestimmten Zeichenfolge beginnt?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!