首页  >  文章  >  后端开发  >  PHP中如何高效查找多维数组中的键值?

PHP中如何高效查找多维数组中的键值?

Patricia Arquette
Patricia Arquette原创
2024-10-31 00:07:29729浏览

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

在多维数组中搜索匹配的键值

遍历多维数组来搜索特定键及其对应值时,很常见递归问题。考虑以下示例方法:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn