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

如何根据另一二维数组的匹配ID与active状态筛选目标数组条目?

解决方案

先预处理$comps,提取有效ID集合

先把$comps里所有status为active的条目挑出来,提取它们的c_id,转成和$rests里r_id一致的类型(这里$comps的c_id是字符串,$rests的r_id是数字,统一类型避免匹配出错):

// 筛选出active状态的组件ID,转成数字类型
$activeCompIds = array_map(
    fn($item) => (int)$item['c_id'],
    array_filter($comps, fn($item) => $item['status'] === 'active')
);

过滤$rests数组

遍历$rests,只保留r_id在刚才提取的有效ID集合里的条目:

$filteredRests = array_filter($rests, function($restItem) use ($activeCompIds) {
    return in_array($restItem['r_id'], $activeCompIds);
});

更简洁的合并写法

如果想少写几行,也可以把两步合并,用array_column直接提取有效ID:

$filteredRests = array_filter($rests, function($rest) {
    // 直接获取所有active状态的c_id(字符串类型)
    $activeIds = array_column(array_filter($comps, fn($c) => $c['status'] === 'active'), 'c_id');
    // 把r_id转成字符串做匹配
    return in_array((string)$rest['r_id'], $activeIds);
});

为什么array_uintersect达不到预期?

array_uintersect是用来找两个数组的交集,但它默认对比的是数组元素本身。这里的元素是二维数组,你需要自定义非常复杂的比较函数,既要匹配c_id和r_id,还要同时判断status,不仅可读性差,还容易因为类型不匹配、逻辑遗漏出问题,完全没必要用这个函数处理这种场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:11:39