Check a 1D array for emptiness
Checking a 1D array for empty values? Don't do a lengthy loop, do this instead:
if(strlen(implode('', $array)) == 0)
Written by kanuj bhatnagar
Related protips
7 Responses
Why not just empty($array)
?
Because sometimes arrays' keys might exist, but no value(s) for those keys. Technically, the array isn't empty, but you can't use any of those keys' values. Case in point, a form with 10 email address fields, whose field names are kept as email[]. When this form is submitted, the $_POST['email'] array will be non-empty, but won't have any values for any of its keys.
But why bother doing such a check when you still eventually have to loop through and check each individual fields.
If I fill 2 at random and leave the other 8 fields empty, you will still have to loop and get the 2 values.
Makes sense for a project I'm in right now, where the first validation has to be that the email field can't be empty. This acts as a first step of validation, and if it is, I simply return an error message. There will be a chance, atleast in our scenario where users will simply submit the form without filling in anything at all.
@kanuj Then why not do something like
if( !isset( $array['email'] ) || empty( $array['email'] ) )
@darkmantiscs Because in the scenario I just mentioned above it won't work. There's a form with multiple name and email rows, and the user can add more via JS. These fields are named like such: name[] and email[]. If the user submits an empty form, isset/empty won't validate a list of emails/names that don't have any data in them. The name/email arrays will have keys equal to the number of rows, but all of them will have empty values.
if (! array_filter($values, 'strlen'))
I think this line is more verbose, but I got to admit that it's a bit slower than @kanuj 's. Just a matter of preference I guess.