Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果数组2中的任何元素包含数组1中的任何元素,请删除该元素_Php_Arrays_Array Filter - Fatal编程技术网

Php 如果数组2中的任何元素包含数组1中的任何元素,请删除该元素

Php 如果数组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 (

我想删除数组2中的任何元素,如果它包含数组1中的任何元素。从我的研究中,我发现array_filter可能是一个可以使用的过滤器,但我不知道该怎么做。然后我需要重置数组键。有人能提出一个方法吗

例如,任何包含“123998”的元素都将从数组2中删除1239986'将不会被删除

数组1

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);