Php 如果数组2中的任何元素包含数组1中的任何元素,请删除该元素
我想删除数组2中的任何元素,如果它包含数组1中的任何元素。从我的研究中,我发现array_filter可能是一个可以使用的过滤器,但我不知道该怎么做。然后我需要重置数组键。有人能提出一个方法吗 例如,任何包含“123998”的元素都将从数组2中删除1239986'将不会被删除 数组1Php 如果数组2中的任何元素包含数组1中的任何元素,请删除该元素,php,arrays,array-filter,Php,Arrays,Array Filter,我想删除数组2中的任何元素,如果它包含数组1中的任何元素。从我的研究中,我发现array_filter可能是一个可以使用的过滤器,但我不知道该怎么做。然后我需要重置数组键。有人能提出一个方法吗 例如,任何包含“123998”的元素都将从数组2中删除1239986'将不会被删除 数组1 Array ( [0] => 123709 [1] => 123797 [2] => 124089 [3] => 124153 ) 阵列2 Array (
Array
(
[0] => 123709
[1] => 123797
[2] => 124089
[3] => 124153
)
阵列2
Array
(
[0] => ../fish/cod/123709-sdfgsdfgvsadfg.pdf
[1] => ../fish/cod/123797-sdfgsdfg-sdfg-sdfgs-dfg-sd.pdf
[2] => ../fish/cod/123998-sdfgsdf-gsdf-gsd-fg-sdfg-.pdf
[3] => ../fish/cod/123998-sdfgsdfg-sdf-gsdfg-sdf-g.pdf
[4] => ../fish/cod/123998-sdfg.pdf
[5] => ../fish/cod/123998-sdfgsdfgsfdg-sdfg.pdf
[6] => ../fish/cod/124089-sdfgsdfg-sdfg-sdfg-.pdf
[7] => ../fish/cod/124153-sdfgsdfgsdf-gsdfg.pdf
)
这是密码
$array1=[...];
$array2=[...];
//go through each element
foreach($array2 AS $key=>$value)
{
//check if element contains substring from first array
foreach($array1 AS $v2)
{
if(strpos($value,$v2)!==FALSE)
{
//remove element
unset($array2[$key]);
//no need to check any further, if element is removed
break;
}
}
}
是的,
array\u filter
听起来不错,下面是一种使用方法:
$pruned_array = array_filter($array2, function($val2) use ($array1) {
foreach($array1 as $val1) {
if (strpos($val2, val1) !== false)
return $val2;
}
});
如果要检查的值的位置始终相同(或者如果它遵循相同的模式),则仅检查此部分可能比使用strpos
更有效 试试这个
假设您将第一个数组定义为$arr1
,将第二个数组定义为$arr2
foreach($arr2 as $key => $value)
{
foreach($arr1 as $subkey => $subvalue)
{
if(strpos($subvalue, $value))
unset($arr2[$key]);
}
}
print_r($arr2);
如果数组2中的任何元素包含数组1中的任何元素,则使用下面的代码删除该元素,但在此之前,您需要分解数组2以获取numric值,例如“123709”
?>我假设@Metzed希望按数字精确删除项目,但此解决方案将接受value
。/fish/cod/12399800-sdfgsfg-sdf-gsdfg-sdf-g.pdf
(数字上添加两个零)这可能是错误的。@Nicolai是的,可能,“包含‘123998’的要求非常不清楚。不过我想适应并不难。对不起,我刚刚更新了这个问题。任何包含“123998”的元素都需要从数组2中删除。”1239986'不会被删除。@Metzed好的,它至少遵循了任何严格和独特的模式吗?总是“/xxxxxx-”?如果是这样,那么strpos($val2,“/”.$val1.-”)呢?谢谢@ClémentMalet-非常好-谢谢!我添加了$pruned\u array=array\u值($pruned\u array)代码>之后,以便重置键0,1,2,3-如果这是正确的方法。。。?
$array1 = array('1', '2', '3', '4');
$array2 = array('5', '6', '7', '1');
$temp = array();
foreach ($array2 as $key => $value)
{
// Check the value hasn't already been found:
if (!in_array($value, $array1))
{
//pushing the non duplicate value in temp array
array_push($temp, $value);
}
}
//assign temp array to array2
print_r($array2=$temp);