如果数组2中包含任何元素,则删除数组2中的任何元素

时间:2014-09-03 11:51:13

标签: php arrays array-filter

我想删除数组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
)

4 个答案:

答案 0 :(得分:0)

这是代码

$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;
        }
    }
}

答案 1 :(得分:0)

是的,array_filter听起来不错,这是一种使用它的方法:

$pruned_array = array_filter($array2, function($val2) use ($array1) {
  foreach($array1 as $val1) {
    if (strpos($val2, val1) !== false) 
      return $val2;
  }
});

如果要检查的值的位置始终相同(或者它遵循相同的模式),则仅检查此部件而不是使用strpos可能更有效。

答案 2 :(得分:0)

试试这个

假设您将第一个数组定义为$arr1,将第二个数组定义为$arr2

foreach($arr2 as $key => $value)
{
   foreach($arr1 as $subkey => $subvalue)
   {
      if(strpos($subvalue, $value))
        unset($arr2[$key]);
   }
}
print_r($arr2);

答案 3 :(得分:0)

使用下面的代码删除数组2中的任何元素,如果它包含数组1中的任何元素但在你需要爆炸数组2以获取数字值之前,例如“123709”     

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

>