过滤值数组

时间:2009-10-30 00:28:34

标签: php arrays filter

我正在使用PHP,我需要过滤一组用户图像。我需要做两个不同的过滤器:

  1. 查看原始数组,查看每个值是否包含“bad words”数组
  2. 中的值
  3. 查看并查看原始数组中的值是否以“错误扩展”值
  4. 之一结束

    图像数组:

    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  
    )  
    

3 个答案:

答案 0 :(得分: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>";

输出

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

我删除了。来自你的扩展

编辑:添加邪恶的跳蚤纠正

答案 1 :(得分: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在线文档中的一些方便的参考资料

答案 2 :(得分:0)

您可以在PHP中使用array_filter函数,只需编写一个执行所需过滤的函数,然后调用

array_filter($array1, "custom_filter");