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
- http://php.net/manual/en/control-structures.continue.php
- http://au.php.net/strstr
- http://php.net/manual/en/function.in-array.php
Author by
SonnyBurnette
Updated on June 04, 2022Comments
-
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:
- Look in original array and see if each value contains a value in my "bad words" array
- 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 )