根据array2值的匹配删除array1值

时间:2013-10-05 08:19:49

标签: php arrays match

updated question with array structure and result expectation

$arr1=array(
            'string',
            'string 1',
            'string 2',
            'return this'
        );

$arr2=array(
            'string'
        );

我想最终得到这个:

array(1) { [1]=> string(11) "return this" }

我尝试了array_diff

array_diff($arr1,$arr2);

然后它返回:

array(3) { [1]=> string(8) "string 1" [2]=> string(8) "string 2" [3]=> string(11) "return this" }

this works 我确信有更优雅的解决方案,但这就是我现在所做的工作。

        $list=array(
            'return this',
            'do not return this string',
            'string'
        );
        $exceptions=array(
            'string'
        );
        foreach($list as $key=>$value) {
            foreach($exceptions as $e) {
                if(strpos($value,$e) !== false ) unset($list[$key]);
            }
        }

结果:

array(1) { [0]=> string(11) "return this" }

3 个答案:

答案 0 :(得分:2)

查看您的编辑后,您可能需要array_filter

$filteredArray = array_filter($list,function($arrayElement){
                     return !in_array($arrayElement,$my_exceptions);
                 });

array_filter接受一个数组和一个回调函数。在回调函数中,您将传递一个数组元素。然后回调需要返回true或false,返回true会将当前数组元素传递给已过滤的数组,返回false会将其保留。

由于您要检查$list中的任何数组元素是否在$my_exceptions中,您是否使用in_array检查它是否在数组中,如果它在数组中返回false,以便过滤掉。

虽然在这种情况下array_diff应该做同样的事情

$arr1 = array(1,2,3,4);
$arr2 = array(1,2,3);

$result = array_diff($arr1, $arr2);

$result这里将是一个包含单个元素的数组4

答案 1 :(得分:0)

尝试array_diff喜欢

array_diff($arr1 , $arr2);

请参阅此LINK

答案 2 :(得分:0)

试试这个

<?php
$arr1 = array(10, 20, 30);
$arr2 = array(5, 20, 30, 40);
foreach($arr2 as $chk_arr){
    if(!in_array($chk_arr, $arr1)) {
        $arr3[] = $chk_arr;
    }
}  

print_r($arr3);