首頁  >  文章  >  後端開發  >  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