在多维数组中搜索匹配的键值
遍历多维数组来搜索特定键及其对应值时,很常见递归问题。考虑以下示例方法:
<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中文网其他相关文章!