2009-10-30 235 views
3

我正在使用PHP,并且我有一组用户图像需要过滤。我需要做2个不同的过滤器:过滤数组值

  1. 看在原数组,看看每个值包含在我的“脏话”阵列
  2. 外观的值,看看原始数组中的值的一端“坏的扩展名” 值

图像阵列:

Array 
( 
    [0] => smiles.gif 
    [1] => kittens.jpg 
    [2] => biscuits.png 
    [3] => butthead.jpg 
) 

$bad_words = array('beavis','butthead','winehouse'); 
$bad_extensions = array('.gif','.tiff'); 

我想它返回:

Array 
( 
    [0] => kittens.jpg 
    [1] => biscuits.png 
) 
+0

的可能重复(http://stackoverflow.com/questions/1594113/filtering-array-values-in-php ) – 2013-10-16 18:06:34

回答

4
$array = array("smiles.gif", "kittens.jpg", "biscuits.png", "butthead.jpg"); 

$new_arr = array_filter($array, "filter"); 

function filter($element) { 
    $bad_words = array('beavis','butthead','winehouse'); 
    $bad_extensions = array('gif','tiff'); 

    list($name, $extension) = explode(".", $element); 
    if(in_array($name, $bad_words)) 
     return; 

    if(in_array($extension, $bad_extensions)) 
     return; 

    return $element; 
} 


echo "<pre>"; 
print_r($new_arr); 
echo "</pre>"; 

输出

一些方便引用

我删除了。从你的扩展寿

编辑:[?在PHP滤波数组值]加入恶跳蚤校正

+0

从技术上讲,您可以返回'$ element'而不是'“{$ name}。{$ extension}”',因为您没有对它进行任何操作。 – 2009-10-30 01:01:25

+0

如果你有一个filename.like.this.jpg怎么办? – alex 2009-10-30 01:20:06

+0

我也很确定'in_array()'不会像那样搜索。它确定字符串是否精确匹配。 – alex 2009-10-30 01:22:54

0

您可以使用array_filter功能在PHP中,只写,做了功能你要那么过滤来电

array_filter($array1, "custom_filter"); 
1

首先,我想删除您的扩展名列表的时间段。它只会使代码更加困难。如果你做到了这一点,下面的(未经测试)的代码应该工作,或至少是一个开始

$cleanArray = []; 

foreach($array as $value) { 

    $extension = path_info($value, PATHINFO_EXTENSION); 

    if (in_array($extension, $bad_extensions)) { 
     continue; 
    } 

    foreach($bad_words as $word) { 
     if (strstr($word, $value)) { 
      continue 2; 
     } 
    } 
    $cleanArray[] = $value; 


} 

$ cleanArray应该有你想要的值。

下面是PHP的在线文档