排除除一个之外的所有元素

时间:2016-11-04 19:02:00

标签: php

我有一系列事情:$arr = array('Apple', 'Pear', 'Pineapple');

我想排除数组中除了'Apple'之外的所有东西。我看过使用array_diff,但我不知道如何在我的情况下使用它。

执行array_diff($arr, array('Apple'));显然会从列表中排除“Apple”。

感谢您的帮助!

编辑:由于需要更多详细信息,我必须处理我正在使用的API中的数据,该API采用排除列表来简化JSON响应。因此,我正在使用包含可能选项的数组来排除。

3 个答案:

答案 0 :(得分:1)

假设您正在遍历数组,而不仅仅是删除Apple'数组中的值...您可以在循环内添加条件检查,以检查任何值。

foreach($arr as $key => $value){
    if($value != 'Apple'){ //array value is not 'Apple,' do something
        //do something
    }
}

或者,您可以使用简单的函数复制数组并排除任何内容:

<?php

function copy_arr_exclude_byVal(array &$arrIn, ...$values){
    $arrOut = array();
    if(isset($values) && count($values) > 0){
        foreach($arrIn as $arrKey => $arrValue){
            if(!in_array($arrValue, $values)){
                $arrOut[] = $arrValue;
                //to keep original key names: $arrOut[$arrKey] = $arrValue;
            }
        }
    }else{
        $arrOut = $arrIn;
        return($arrOut);//no exclusions, copy and return array
    }
    return($arrOut);
}


/* TEST */
$testArr = array('test1', 'test2', 'foo', 'bar');
$newArr = copy_arr_exclude_byVal($testArr, 'foo');

echo var_dump($newArr);

此外,您可以查看本机函数array_filter():http://php.net/manual/en/function.array-filter.php

答案 1 :(得分:1)

有一个更优雅的解决方案:

$arr = array('Apple', 'Pear', 'Pineapple');

$newArr = array_filter($arr, function($element) {
        return $element != "Apple";
});

print_r($newArr);

输出

Array
(
    [1] => Pear
    [2] => Pineapple
)

或者,如果您需要排除Apple以外的所有内容,只需将return语句更改为return $element == "Apple";

<强>更新

你说它不是一个优雅的解决方案,因为

  

变量范围不会找到要在那里使用的函数的参数。即方法参数$param1不能用于返回$element == $param1;

但它可以。您只是不了解use

$arr = array('Apple', 'Pear', 'Pineapple');
$param = "Apple";

$newArr = array_filter($arr, function($element) use ($param) {
        return $element != $param;
});

现在,$newArr仍包含请求的

Array
(
    [1] => Pear
    [2] => Pineapple
)

答案 2 :(得分:0)

在您的情况下,函数array_intersect()也可能有所帮助。例如:

array_intersect(array('Apple', 'Pear', 'Pineapple'), array('Apple', 'Watermelon'));

将为数组提供相交的值:['Apple']