2016-11-04 65 views
0

我有许多事情的数组:$arr = array('Apple', 'Pear', 'Pineapple');剔除所有元素,但一个

我想在数组中除了,比如,“苹果”排除一切。我看了一下使用array_diff,但我不知道如何在我的情况下使用它。

array_diff($arr, array('Apple'));明显从列表中排除'Apple'。

感谢您的帮助!

编辑:由于需要更多的细节,我必须处理来自我使用的API的数据,它使用一个排除列表来简化JSON响应。因此,我使用包含可能的选项排除的数组。

+0

什么?你想要一个元素,你知道你正在寻找的元素的价值? 'in_array' ... –

+0

我需要它在我正在使用的其余api中排除列表 – madcrazydrumma

+1

需要更多详细信息。你有什么工作,那么你需要什么不同? – AbraCadaver

回答

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 
) 
+0

这会更优雅,但变量作用域不会找到要在其中使用的函数的参数。即方法参数'$ param1'不能用于'return $ element == $ param1;' – madcrazydrumma

+1

你只是不知道'use'。我编辑了我的帖子。 –

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

+0

修改后将排除内容推送到我自己使用的数组中。谢谢! – madcrazydrumma

0

功能array_intersect()也可能是你的情况有所帮助。例如:

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

将给予相交值的数组:['Apple']

相关问题