Reputation: 24783
How I can remove all elements of an array that contain just whitespace, not whitespace in an element like "foobar "
but just empty array elements like " "
?
Thanks.
Upvotes: 2
Views: 2855
Reputation: 490143
preg_grep()
is your friend.
$array = array("This", " ", "is", " ", "a", " ", "test.");
$array = preg_grep('/^\s*\z/', $array, PREG_GREP_INVERT);
var_dump($array);
This will drop all array members of which the string is blank or only consist of whitespace according to \s
character class (spaces, tabs, and line breaks).
array(4) {
[0]=>
string(4) "This"
[2]=>
string(2) "is"
[4]=>
string(1) "a"
[6]=>
string(5) "test."
}
Upvotes: 6
Reputation: 2470
foreach($arr as $key=>$value)
{
if($value=" ")
{
unset($arr[$key]);
/* optional */
array_values($arr);
}
}
Upvotes: 0
Reputation: 800
$array = array('foo',' ','bar ');
foreach ($array as $key => $value) {
if (trim($value) == '') unset($array[$key]);
}
Array when dumped then contains:
array(2) {
[0]=>
string(3) "foo"
[2]=>
string(4) "bar "
}
Upvotes: 0
Reputation: 28429
This code takes advantage of the callback parameter for array_filter
. It will loop the array, call trim()
on the value, and remove it if the resulting value evaluates to false
. (which an empty string will)
$a = array_filter($a, 'trim');
Upvotes: 3
Reputation: 224859
$arr = array("This", " ", "is", " ", "a", " ", "test.");
$result = array();
for($arr as $x) {
if(!preg_match("/^\s*$/", $x)) $result[] = $x;
}
$arr = $result;
Upvotes: 3