首頁 >後端開發 >php教程 >如何根據多維PHP數組中的鍵值對高效查找子數組?

如何根據多維PHP數組中的鍵值對高效查找子數組?

Susan Sarandon
Susan Sarandon原創
2024-12-15 20:39:18306瀏覽

How to Efficiently Find Subarrays Based on Key-Value Pairs in Multidimensional PHP Arrays?

根據多維PHP 數組中的鍵值對查找子數組

遍歷多維數組時,基於鍵值對查找特定子數組可能具有挑戰性在鍵值對上。但是,有一種有效的方法可以遞歸地執行此操作,無論數組的深度如何。

函數實作:

讓我們建立一個函數來搜尋符合指定條件的子數組:

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        // Check if the current subarray matches
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        // Recursively search inner subarrays
        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}

用法範例:

給定以下範例陣列:

$arr = array(0 => array(id => 1, name => "cat 1"),
             1 => array(id => 2, name => "cat 2"),
             2 => array(id => 3, name => "cat 1"));

我們可以搜尋具有鍵“名」和值「cat」的子數組1':

$found = search($arr, 'name', 'cat 1');
print_r($found);

輸出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => cat 1
        )

    [1] => Array
        (
            [id] => 3
            [name] => cat 1
        )

)

效率考慮因素:

為了提高效率,特別是當處理大型數組時,可以透過避免數組合併來優化函數。相反,它可以將遞歸呼叫的結果儲存在臨時數組中:

function search_optimized($array, $key, $value)
{
    $results = [];
    search_r($array, $key, $value, $results);
    return $results;
}

function search_r($array, $key, $value, & $results)
{
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}

透過引用傳遞結果數組,函數可以有效地建立最終結果。

以上是如何根據多維PHP數組中的鍵值對高效查找子數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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