I am trying to understand this simple code, if someone could explain this one section of code to a beginner. Please bear with me on the simple code and trying to understand this.
I understand what the loops are doing, it's just the !isset($value[$values])
part that's tripping me up.
Can someone explain to me what's going on with the !isset
and why it's not set?
Example
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$array3 = [7, 8, 9];
$value = [];
foreach ([$array1, $array2, $array3] as $arr) {
foreach ($arr as $values) {
if (!isset($value[$values])) { // Why is this part of the code not set?
...
}
}
}
From my understanding is:
1) $value[]
Value is an empty array
2) $value[$values]
You are passing in $values (1, 2, 3, 4, 5 ...) as the $key of the $value array
3) When I var_dump $value[$values] inside of the inner foreach loop I get Notice: Undefined index:
Why am I getting this? The index should be the numbers right?
4) Lastly, why is $value[$values]
considered not set?
$value
is an empty array. Therefore, any keys that you are calling within that array will not be set, until you assign a value to that key.
$value[$values]
is passing [ 1, 2, 3 ]
, [ 4, 5, 6 ]
, [ 7, 8, 9 ]
, so you are calling $value[1]
, $value[2]
, etc.
You are getting undefined index
because the index is undefined. PHP handles this well and issues a Notice
. Other languages (Java, for example) would issue a Null Pointer Exception
.
And lastly, because $value
is an empty array, and that key is not set, isset()
returns false
. And !isset()
would then return true
, thus the code would execute.
When you run this code, $value is empty, so all values that you test are unset, there is no key 1, 2, 3, 4, 5 in this array... So this is why you got the undefined index error...