在多維數組中搜尋匹配的鍵值
遍歷多維數組來搜尋特定鍵及其對應值時,很常見遞歸問題。考慮以下範例方法:
<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>
此方法旨在定位關聯數組中的鍵並傳回其關聯值。但是,其遞歸方法存在潛在問題。
要解決此問題,可以使用PHP 的新功能採用更現代、更有效率的解決方案:
<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>
此方法利用遞歸和迭代器有效地一個匹配的鍵。
或者,如果您希望迭代所有匹配項而不僅僅是第一個匹配項,則可以使用PHP 5.6 的生成器:
<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>
透過這種方法,您可以優雅地迭代數組中的所有匹配值。
以上是PHP中如何有效率地找出多維數組中的鍵值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!