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

如何移除一维数组中不存在于嵌套数组中的元素?

如何移除一维数组中不存在于嵌套数组中的元素?

看起来你已经找对了思路,但可以用更简洁、易维护的方式解决这个问题!你的现有代码虽然能实现需求,但如果后续嵌套数组的子数组数量增加,写一堆or in_array会变得很繁琐,扩展性也差。

优化方案:先扁平化嵌套数组

核心思路是先把嵌套的$arr_cls转换成一个一维数组,这样只需要一次检查就能判断元素是否存在,不用逐个遍历子数组:

// 将嵌套数组扁平化为一维数组
$all_valid_values = array_merge(...$arr_cls);
// 可选:去重优化,减少后续in_array的检查次数
$all_valid_values = array_unique($all_valid_values);

// 过滤$part_t2,只保留存在于有效列表中的元素
$part_t2_2 = array_filter($part_t2, function($value) use ($all_valid_values) {
    return in_array($value, $all_valid_values, true);
});

代码解释

  1. array_merge(...$arr_cls):利用PHP的可变参数特性,把$arr_cls里的所有子数组合并成一个一维数组,不管子数组数量有多少,这行代码都能适配。
  2. array_unique():去除一维数组里的重复值,虽然不影响最终的检查结果,但能减少后续in_array的比对次数,提升效率。
  3. array_filter():遍历$part_t2,用匿名函数判断每个元素是否在有效列表中,只保留符合条件的元素。

兼容低版本PHP(5.6以下)

如果你的PHP版本不支持可变参数,可以用array_reduce来扁平化数组:

$all_valid_values = array_reduce($arr_cls, function($carry, $sub_arr) {
    return array_merge($carry, $sub_arr);
}, []);

关于你原有代码的说明

你的原有代码逻辑本身是正确的,如果没生效,大概率是字符串的大小写差异或者隐形空格导致的(比如"Sturm Graz"和数组中的值是否完全一致?)。不过还是推荐扁平化数组的方案,代码更简洁易维护。

备注:内容来源于stack exchange,提问作者Tony Poli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:49:33