在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',
],
];
我們想過濾掉每個子數組中的age和city字段,只保留id和name 。
<?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);
通過array_keys($item)獲取當前子數組所有的鍵名。
用array_diff()計算出想保留的鍵,即原鍵集合減去要刪除的鍵集合。
遍歷過濾後的鍵名,重新組裝新的數組。
最終$result就是過濾後的多維數組。
Array
(
[0] => Array
(
[id] => 1
[name] => Alice
)
[1] => Array
(
[id] => 2
[name] => Bob
)
)
通過array_diff()和array_keys()的組合,我們能夠快速、靈活地從多維數組中過濾掉指定的鍵值。此方法通用性強,適合處理各類複雜數組結構。若要過濾的鍵較多,或者數組層級更深,也可以封裝成函數進行遞歸處理。