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 <
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');
preg_grep() is your friend.
$array = array("This", " ", "is", " ", "a", " ", "test.");
$array = preg_grep('/^\s*\z/', $array, PREG_GREP_INVERT);
var_dump($array);
CodePad.
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."
}
$arr = array("This", " ", "is", " ", "a", " ", "test.");
$result = array();
for($arr as $x) {
if(!preg_match("/^\s*$/", $x)) $result[] = $x;
}
$arr = $result;
$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 "
}
foreach($arr as $key=>$value)
{
if($value=" ")
{
unset($arr[$key]);
/* optional */
array_values($arr);
}
}