Reputation: 20049
I looked around and can't quite find the answer for this, so I'm wondering if I contain an array such as this..
$array['foo']['bar'][1] = '';
$array['foo']['bar'][2] = '';
$array['foo']['bar'][3] = '';
$array['foo']['bar'][4] = '';
How can I check if all the values are empty? I tried doing the following:
if (empty($array['foo']['bar'])) {
// Array empty
}
But as expected that didn't work.
How can I do this?
Upvotes: 2
Views: 6323
Reputation: 1051
A short alternative would be:
if (empty(implode($array['foo']['bar']))) {
// is empty
}
Note that some single values may be considered as empty. See empty().
Upvotes: 1
Reputation: 24655
If you wanted to check to see if all of the values where populated you can use
if(call_user_func_array("isset", $array['foo']['bar']))
For what you want to do though you could use array reduce with a closure
if(array_reduce($array, function(&$res, $a){if ($a) $res = true;}))
Note this will only work in php 5.3+
Upvotes: 3
Reputation: 10975
$array['foo']['bar']
isn't empty because it's actually array(1=>'',2=>'',3=>'',4=>'')
.
You would need to do a foreach
loop on it to check if it is indeed all empty.
$arr_empty = true;
foreach ($array['foo']['bar'] as $arr) {
if (!empty($arr)) {
$arr_empty = false;
}
}
//$arr_empty is now true or false based on $array['foo']['bar']
Upvotes: 1