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

PHP数组操作需求:合并数组及删除含部分匹配的元素

解决方案:PHP数组合并与部分匹配元素过滤

我来帮你拆解这两个PHP数组操作的问题,分两部分逐一解决:

1. 合并两个PHP数组

PHP里合并数组有两种常用方案,你可以根据数组类型选择:

  • array_merge():适合索引数组,会重新编排连续索引;如果是关联数组,重复的字符串键会被后面的数组覆盖
  • + 运算符:保留原有键名,后面数组的键若和前面重复会直接被忽略

针对你给出的索引数组示例,用array_merge()最直接:

$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];

// 合并两个数组
$mergedArray = array_merge($a, $b);
print_r($mergedArray);
// 输出结果:Array ( [0] => abc [1] => cde [2] => efg [3] => hi [4] => bce [5] => ifg [6] => hig )

2. 实现部分匹配的元素过滤(类似in_array的模糊匹配)

你的需求是从$b中移除所有包含$a中任意元素作为子串的元素(比如$b里的hig包含$a里的hi,所以要被移除)。我们可以用array_filter()结合strpos()来实现这个逻辑:

核心思路

遍历$b的每个元素,检查该元素是否包含$a中的任意一个子串。如果没有匹配到任何子串,就保留该元素;反之则过滤掉。

完整代码示例

$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];

// 过滤符合条件的元素
$filteredB = array_filter($b, function($item) use ($a) {
    // 遍历$a中的每个关键词,检查是否是当前元素的子串
    foreach ($a as $keyword) {
        // 用!==false严格判断,避免子串在开头时返回0被误判为false
        if (strpos($item, $keyword) !== false) {
            // 找到匹配,返回false过滤该元素
            return false;
        }
    }
    // 无匹配,返回true保留元素
    return true;
});

// 可选:重置数组索引为连续数字(array_filter会保留原索引)
$filteredB = array_values($filteredB);

print_r($filteredB);
// 输出结果:Array ( [0] => bce [1] => ifg )

代码说明

  • use ($a):让匿名函数可以访问外部的$a数组
  • strpos($item, $keyword) !== false:严格判断子串是否存在,规避子串在开头时返回0被误判为不存在的情况
  • array_values():重置过滤后数组的索引,让它回到连续的数字序列(如果不需要保留原索引,可以省略这一步)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:39