首頁  >  文章  >  後端開發  >  如何有效率地尋找多維PHP數組中的第一個匹配鍵?

如何有效率地尋找多維PHP數組中的第一個匹配鍵?

Barbara Streisand
Barbara Streisand原創
2024-10-31 05:49:01851瀏覽

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

深入研究多維數組遍歷:發現第一個匹配鍵

在PHP 程式設計領域,遍歷多維數組可能是一項迷宮般的任務。當面臨檢索與第一個匹配鍵關聯的值的目標時,開發人員可能會偶然發現遞歸方法。下面概述的一種這樣的方法在其遞歸實現中存在潛在的陷阱:

<br>private function find($needle, $haystack) {<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;;

}

函數旨在遞歸地探索關聯數組,尋找與輸入的針對齊的鍵並返回其對應的值。然而,遞歸仍然不完整,問題沒有得到解答。

採用現代 PHP 打造簡化的解決方案

在不斷發展的 PHP 環境中,新版本提供了更多功能高效且優雅的數組遍歷方法。考慮以下為PHP 5.6 及更高版本定制的程式碼片段:

<br>function recursiveFind(array $haystack, $needle)<br>{<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;
    }
}

}
}

}

}

}

}}}

}

}

}

}
}
}

$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        yield $value;
    }
}

這段現代化程式碼利用生成器的強大功能來簡化遞歸遍歷過程。它無縫地迭代所有數組元素,在及時返回相應值之前過濾針。


使用生成器擴展功能

// Use `$value` here

PHP 5.6 的出現引入了生成器,增強了功能開發人員可以從遞歸搜尋中產生多個匹配項,而不僅僅是第一次遇到的匹配項。以下代碼片段展示了此增強功能:

<p>function recursiveFind(array $haystack, $needle)</p>{}// 用法foreach (recursiveFind($haystack, $needle) as $value) {}
現在,你可以迭代所有匹配的鍵值對,而不是僅限於第一個匹配。這擴展了函數的多功能性,允許從多維數組中進行更全面的資料檢索。

以上是如何有效率地尋找多維PHP數組中的第一個匹配鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn