Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man in PHP effizient nach Schlüsselwerten in mehrdimensionalen Arrays suchen?

Wie kann man in PHP effizient nach Schlüsselwerten in mehrdimensionalen Arrays suchen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 00:07:29729Durchsuche

How to Efficiently Search for Key Values in Multidimensional Arrays in PHP?

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!

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