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
相关产品推荐
相关产品推荐

