在 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() 的组合,我们能够快速、灵活地从多维数组中过滤掉指定的键值。此方法通用性强,适合处理各类复杂数组结构。若要过滤的键较多,或者数组层级更深,也可以封装成函数进行递归处理。