2009-10-30 180 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的在線文檔