【问题标题】:Filter Array of Values过滤值数组
【发布时间】:2009-10-30 00:28:34
【问题描述】:

我正在使用 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  
)  

【问题讨论】:

标签: php arrays filter


【解决方案1】:
$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
)

我删除了 .来自你的扩展

编辑:添加邪恶跳蚤校正

【讨论】:

  • 从技术上讲,您可以返回 $element 而不是 "{$name}.{$extension}",因为您没有对其进行任何操作。
  • 我也很确定in_array() 不会那样搜索。它确定字符串是否精确匹配。
  • @alex in_array "如果在数组中找到 needle,则返回 TRUE,否则返回 FALSE"。 @Flea 好点,ty。
【解决方案2】:

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

$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 在线文档的方便参考

【讨论】:

    【解决方案3】:

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

    array_filter($array1, "custom_filter");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2021-09-29
      • 2021-03-27
      相关资源
      最近更新 更多