2009-10-30 10 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) –

ответ

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 
) 

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

редактирования: [? значений массива фильтрации в PHP] коррекция добавила нечестивых блох

+0

Технически вы можете вернуть '$ element' вместо' '{$ name}. {$ Extension}", так как вы не манипулировали им. –

+0

Что делать, если у вас есть filename.like.this.jpg? – alex

+0

Я также уверен, что 'in_array()' не ищет этого. Он определяет, соответствует ли строка точно. – alex

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 онлайн документации

Смежные вопросы