我有一系列事情:$arr = array('Apple', 'Pear', 'Pineapple');
我想排除数组中除了'Apple'之外的所有东西。我看过使用array_diff,但我不知道如何在我的情况下使用它。
执行array_diff($arr, array('Apple'));
显然会从列表中排除“Apple”。
感谢您的帮助!
编辑:由于需要更多详细信息,我必须处理我正在使用的API中的数据,该API采用排除列表来简化JSON响应。因此,我正在使用包含可能选项的数组来排除。
答案 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']