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