2009-10-30 5 views
3

J'utilise PHP et j'ai un tableau d'images utilisateur que j'ai besoin de filtrer. Je dois faire 2 filtres différents:Filtrer Tableau de valeurs

  1. Regardez dans le tableau original et si chaque valeur contient une valeur dans mes « mauvais mots » tableau
  2. Regardez et voyez si la valeur en fin de tableau original dans l'un des "mauvaises extensions" valeurs

Images tableau:

Array 
( 
    [0] => smiles.gif 
    [1] => kittens.jpg 
    [2] => biscuits.png 
    [3] => butthead.jpg 
) 

$bad_words = array('beavis','butthead','winehouse'); 
$bad_extensions = array('.gif','.tiff'); 

je voudrais qu'il revienne:

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

double possible (http://stackoverflow.com/questions/1594113/filtering-array-values-in-php –

Répondre

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>"; 

Sorties

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

J'ai retiré le. de vos extensions tho

modifier: [? valeurs de tableau de filtrage en php] ajouté correction méchants des puces

+0

Techniquement, vous pouvez renvoyer '$ element' au lieu de' "{$ name}. {$ Extension}" 'car vous n'avez pas manipulé. –

+0

Que faire si vous avez un nom de fichier.like.this.jpg? – alex

+0

Je suis également assez sûr que 'in_array()' ne recherche pas comme ça. Il détermine si la chaîne correspond exactement. – alex

0

Vous pouvez utiliser la fonction array_filter en PHP, il suffit d'écrire une fonction qui fait le filtrage que vous voulez puis appelez

array_filter($array1, "custom_filter"); 
1

Tout d'abord, je supprimer les périodes dans votre liste d'extension. Cela ne fera que rendre le code plus difficile. Si vous avez fait cela, le code suivant (non testé) devrait fonctionner, ou tout au moins un début

$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 devrait avoir les valeurs que vous voulez.

Voici quelques références pratiques de PHP docs en ligne

Questions connexes