當前位置: 首頁> 最新文章列表> 用array_diff() + array_keys() 過濾多維數組中的鍵

用array_diff() + array_keys() 過濾多維數組中的鍵

M66 2025-06-06

在PHP 開發中,經常會遇到需要從多維數組中過濾掉某些特定鍵值的需求。本文將介紹如何結合array_diff()array_keys()兩個函數,優雅高效地實現這一功能。

一、函數簡介

  • array_keys()
    返回數組中所有的鍵名,支持指定鍵值過濾。

  • array_diff()
    計算兩個(或更多)數組的差集,返回在第一個數組中但不在其它數組中的值。

通過這兩個函數的結合使用,我們可以先拿到數組所有的鍵名,然後通過差集的方式排除掉不需要的鍵,最後重新生成過濾後的數組。

二、問題場景

假設有一個多維數組,結構如下:

 $data = [
    [
        'id' => 1,
        'name' => 'Alice',
        'age' => 25,
        'city' => 'Beijing',
    ],
    [
        'id' => 2,
        'name' => 'Bob',
        'age' => 30,
        'city' => 'Shanghai',
    ],
];

我們想過濾掉每個子數組中的agecity字段,只保留idname

三、實現代碼

<?php

$data = [
    [
        'id' => 1,
        'name' => 'Alice',
        'age' => 25,
        'city' => 'Beijing',
    ],
    [
        'id' => 2,
        'name' => 'Bob',
        'age' => 30,
        'city' => 'Shanghai',
    ],
];

// 需要過濾掉的鍵名
$keysToRemove = ['age', 'city'];

$result = [];

foreach ($data as $item) {
    // 獲取當前數組的所有鍵
    $keys = array_keys($item);
    
    // 計算需要保留的鍵,即 $keys 和 $keysToRemove 的差集
    $filteredKeys = array_diff($keys, $keysToRemove);
    
    // 利用保留的鍵重新構建子數組
    $filteredItem = [];
    foreach ($filteredKeys as $key) {
        $filteredItem[$key] = $item[$key];
    }
    
    $result[] = $filteredItem;
}

print_r($result);

代碼解析:

  1. 通過array_keys($item)獲取當前子數組所有的鍵名。

  2. array_diff()計算出想保留的鍵,即原鍵集合減去要刪除的鍵集合。

  3. 遍歷過濾後的鍵名,重新組裝新的數組。

  4. 最終$result就是過濾後的多維數組。

四、運行結果

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

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )
)

五、總結

通過array_diff()array_keys()的組合,我們能夠快速、靈活地從多維數組中過濾掉指定的鍵值。此方法通用性強,適合處理各類複雜數組結構。若要過濾的鍵較多,或者數組層級更深,也可以封裝成函數進行遞歸處理。