You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何过滤关联数组,保留所有数组的共同键?

保留数组集合中所有数组共有的键

嘿,这个需求我太熟了!要处理一组关联数组,只保留它们共有的键,核心思路特别清晰:先找出所有数组都存在的键,再用这个键集合去过滤每个数组。下面我给你用两种常用语言分别举例说明:

PHP 实现

假设你的数组集合是一个包含所有目标数组的大数组,比如:

// 你的数组集合,包含a、h以及其他可能的数组
$arrayCollection = [
    $a, // 99个元素的关联数组
    $h, // 72个元素的关联数组
    // 这里可以继续添加其他需要处理的数组
];

步骤分解:

  1. 提取每个数组的键:用array_map配合array_keys,把集合里每个数组的键都提取出来,得到一个键数组的集合。
  2. 计算键的交集:用call_user_func_array调用array_intersect,计算所有键数组的交集——这就是所有数组共有的键。
  3. 过滤每个数组:遍历集合,用array_intersect_key保留每个数组中属于交集的键对应的元素(注意要把键数组转成键值对,用array_flip就行)。

完整代码:

// 步骤1:获取所有数组的键数组
$allKeyArrays = array_map('array_keys', $arrayCollection);

// 步骤2:计算所有数组共有的键
$commonKeys = call_user_func_array('array_intersect', $allKeyArrays);

// 步骤3:过滤数组集合,只保留共有键的元素
$filteredCollection = array_map(function($currentArray) use ($commonKeys) {
    // array_intersect_key需要键值对格式的参数,所以用array_flip转换
    return array_intersect_key($currentArray, array_flip($commonKeys));
}, $arrayCollection);

JavaScript 实现

如果用JS处理,思路一致,只是API略有不同:

// 你的数组集合,包含a、h等关联数组(JS里就是对象)
const arrayCollection = [a, h /* 其他需要处理的对象 */];

步骤分解:

  1. 把每个数组的键转成Set:Set结构更方便做交集判断。
  2. 逐步计算键的交集:从第一个数组的键Set开始,依次和其他数组的键Set取交集。
  3. 过滤每个对象:遍历集合,只保留交集里的键对应的属性。

完整代码:

// 步骤1:将每个对象的键转为Set
const keySets = arrayCollection.map(obj => new Set(Object.keys(obj)));

// 步骤2:计算所有对象共有的键
let commonKeys = [...keySets[0]];
for (const keySet of keySets.slice(1)) {
    commonKeys = commonKeys.filter(key => keySet.has(key));
}

// 步骤3:过滤每个对象,保留共有键的属性
const filteredCollection = arrayCollection.map(obj => {
    const filteredObj = {};
    commonKeys.forEach(key => {
        if (obj.hasOwnProperty(key)) {
            filteredObj[key] = obj[key];
        }
    });
    return filteredObj;
});

小提示

如果确定h数组的键是所有数组的子集(比如你提到最终要保留72个键,正好是h的元素数),可以直接用h的键作为commonKeys,但还是推荐用通用方法——万一后续添加其他数组,通用方法不用改代码就能自动适配。

内容的提问来源于stack exchange,提问作者Mudd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:30