I have an array with numerous dimensions, and I want to test for the existence of a cell.
The below cascaded approach, will be for sure a safe way to do it:
if (array_key_exists($arr, 'dim1Key'))
if (array_key_exists($arr['dim1Key'], 'dim2Key'))
if (array_key_exists($arr['dim1Key']['dim2Key'], 'dim3Key'))
echo "cell exists";
But is there a simpler way?
I’ll go into more details about this:
- Can I perform this check in one single statement?
- Do I have to use array_key_exist or can I use something like isset? When do I use each and why?
isset()is the cannonical method of testing, even for multidimensional arrays. Unless you need to know exactly which dimension is missing, then something likeis perfectly acceptable, even if the
[1]and[2]elements aren’t there (3 can’t exist unless 1 and 2 are there).However, if you have
then
comment followup:
Maybe this analogy will help. Think of a PHP variable (an actual variable, an array element, etc…) as a cardboard box:
isset()looks inside the box and figures out if the box’s contents can be typecast to something that’s “not null”. It doesn’t care if the box exists or not – it only cares about the box’s contents. If the box doesn’t exist, then it obviously can’t contain anything.array_key_exists()checks if the box itself exists or not. The contents of the box are irrelevant, it’s checking for traces of cardboard.