Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 筛选值数组_Php_Arrays_Filter - Fatal编程技术网

Php 筛选值数组

Php 筛选值数组,php,arrays,filter,Php,Arrays,Filter,我正在使用PHP,我有一个需要过滤的用户图像数组。我需要做两个不同的过滤器: 查看原始数组,看看每个值是否包含我的“坏单词”数组中的值 查看原始数组中的值是否以一个“坏扩展”值结尾 图像阵列: Array ( [0] => smiles.gif [1] => kittens.jpg [2] => biscuits.png [3] => butthead.jpg ) $bad_words = array('bea

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

  • 查看原始数组,看看每个值是否包含我的“坏单词”数组中的值
  • 查看原始数组中的值是否以一个“坏扩展”值结尾
  • 图像阵列:

    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中使用该函数,只需编写一个函数来执行您想要的过滤,然后调用它

    array_filter($array1, "custom_filter");
    

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

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

    我取下了那根绳子。从你的分机里


    编辑:添加了邪恶跳蚤修正

    从技术上讲,你可以返回
    $element
    而不是
    “{$name}.{$extension}”
    ,因为你没有对它进行任何操作。我也很确定
    in_array()
    不会这样搜索。它确定字符串是否精确匹配。@alex in_array“如果在数组中找到指针,则返回TRUE,否则返回FALSE”@跳蚤很好,泰。可能是复制品
    $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
    )