Filter Array of Values

11,859

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

Outputs

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

I removed the . from your extensions tho

edit: added wicked fleas correction

Solution 2

Firstly, I'd remove the periods in your extension list. It will only make the code more difficult. If you've done this, the following (untested) code should work, or at least be a start

$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 should have the values you want.

Here are some handy references from the PHP online docs

Share:
11,859
SonnyBurnette
Author by

SonnyBurnette

Updated on June 04, 2022

Comments

  • SonnyBurnette
    SonnyBurnette almost 2 years

    I am using PHP and I have an array of user images that I need to filter. I need to do 2 different filters:

    1. Look in original array and see if each value contains a value in my "bad words" array
    2. Look and see if the value in the original array ends in one of "bad extensions" values

    Images Array:

    Array  
    (  
        [0] => smiles.gif  
        [1] => kittens.jpg  
        [2] => biscuits.png  
        [3] => butthead.jpg  
    )  
    
    $bad_words = array('beavis','butthead','winehouse');  
    $bad_extensions = array('.gif','.tiff');  
    

    I would like it to return:

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