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

PHP数组处理:移除原始数组中未在所有子数组存在的ID求助

问题:筛选原始数组中存在于所有子数组的ID

需求:从原始ID数组$origialArr中移除那些未在所有子数组中存在的ID,仅保留在$arr的每一个子数组里都出现过的ID。

给定数组

$origialArr = [4883,8438,8468,4001,8577];
$arr = [
 [8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
];

无效尝试代码

// attempt 1
$arr1 = [];
foreach ($arr as $item) {
    $arr1[] = array_intersect($origialArr, $item);
}

// attempt 2
$anotherArr = [];
foreach ($arr as $item) {
    foreach ($item as $id) {
         $anotherArr[] = array_filter($origialArr, function($origArr) use ($id) {
              if ($id === $origArr) {
                   return $id;
              }
         });
    }
}

解决方案

方法一:逐步求所有子数组的交集

先以第一个子数组为初始交集,再依次和后续每个子数组求交集,最后确保结果仅包含原始数组中的元素:

$origialArr = [4883,8438,8468,4001,8577];
$arr = [
 [8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
];

// 初始化公共ID集合为第一个子数组
$commonIds = $arr[0];
// 遍历剩余子数组,逐步缩小公共ID范围
foreach (array_slice($arr, 1) as $subArr) {
    $commonIds = array_intersect($commonIds, $subArr);
}
// 仅保留原始数组中存在的公共ID,并重置索引
$result = array_values(array_intersect($origialArr, $commonIds));

print_r($result);
// 输出:Array ( [0] => 8468 [1] => 4001 [2] => 8577 )

方法二:遍历原始数组元素逐一校验

遍历原始数组的每个ID,检查它是否存在于所有子数组中:

$origialArr = [4883,8438,8468,4001,8577];
$arr = [
 [8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8468,4001,8577],
 [4883,8438,8468,4001,8577],
 [4883,8438,8468,4001,8577],
];

$result = [];
foreach ($origialArr as $id) {
    $existsInAll = true;
    // 检查当前ID是否在所有子数组中存在
    foreach ($arr as $subArr) {
        if (!in_array($id, $subArr)) {
            $existsInAll = false;
            break;
        }
    }
    if ($existsInAll) {
        $result[] = $id;
    }
}

print_r($result);
// 输出:Array ( [0] => 8468 [1] => 4001 [2] => 8577 )

错误分析

  • 尝试1:仅将原始数组与每个子数组的交集存入新数组,未进一步求这些交集的公共部分,因此无法得到全局符合条件的ID。
  • 尝试2:嵌套循环中反复调用array_filter生成零散数组,逻辑混乱,没有筛选出同时存在于所有子数组的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:46