Фильтровать массив значений - PullRequest
3 голосов
/ 30 октября 2009

Я использую 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  
)  

Ответы [ 3 ]

4 голосов
/ 30 октября 2009
<code>$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 "
";

Выходы

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

Я удалил. от ваших расширений tho

edit: добавлена ​​коррекция злых блох

1 голос
/ 30 октября 2009

Во-первых, я бы удалил точки в вашем списке расширений. Это только сделает код более сложным. Если вы сделали это, следующий (непроверенный) код должен работать или, по крайней мере, быть началом

$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

0 голосов
/ 30 октября 2009

Вы можете использовать функцию array_filter в PHP, просто написать функцию, которая выполняет фильтрацию, которую вы хотите, затем вызвать

array_filter($array1, "custom_filter");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...