2

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?

1

3 Answers 3

3

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+

Sign up to request clarification or add additional context in comments.

1 Comment

Hmmm looking at the example on the php.net site doesn't it split the array values into separate vars and hence this would pass 4 values to isset and be invalid?
1

$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']

Comments

1

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().

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.