So we encountered this today:
<?php
$array = [1, 2, 3];
var_dump($array['id']); // this yields a warning
var_dump($array[0]['id']); // none of these do
var_dump($array[0][0]['id']);
var_dump($array[0]['id'][0]);
As indicated, this yields results:
C:\temp>php shite.php
PHP Notice: Undefined index: id in C:\temp\shite.php on line 4
PHP Stack trace:
PHP 1. {main}() C:\temp\shite.php:0
Notice: Undefined index: id in C:\temp\shite.php on line 4
Call Stack:
0.0002 353472 1. {main}() C:\temp\shite.php:0
C:\temp\shite.php:4:
NULL
C:\temp\shite.php:5:
NULL
C:\temp\shite.php:6:
NULL
C:\temp\shite.php:7:
NULL
C:\temp>
PHP Notice: Undefined index: id in C:\temp\shite.php on line 4
PHP Stack trace:
PHP 1. {main}() C:\temp\shite.php:0
Notice: Undefined index: id in C:\temp\shite.php on line 4
Call Stack:
0.0002 353472 1. {main}() C:\temp\shite.php:0
C:\temp\shite.php:4:
NULL
C:\temp\shite.php:5:
NULL
C:\temp\shite.php:6:
NULL
C:\temp\shite.php:7:
NULL
C:\temp>
I think this behaviour is bloody daft. Accessing something that doesn't exist should be more than a notice, and it shouldn't then go ahead and return "null" anyhow. And giving a notice and returning null is possibly the worst way of combining possible actions here. What am I supposed to do with that? Other than bury my head in my hands a weep.
Now this is partially documented on the Arrays page of the docs:
Note:
Attempting to access an array key which has not been defined is the same as accessing any other undefined variable: anE_NOTICE
-level error message will be issued, and the result will beNULL
.Note:
Array dereferencing a scalar value which is not a string silently yieldsNULL
, i.e. without issuing an error message.
That's shit, but... well: it's not that surprising (I mean... it's PHP, right?). But how come
$array['id']
incurs the warning, but this doesn't:
$array[0]['id']
This just seems to make fairly unhelpful behaviour just that much less helpful.
I'm sure there's a reason for this. Not a good one, I hasten to add, but no doubt there's a reason.
Anyone know what it is?
Update:
Thanks to Dave (comment below) for pointing out there's a bug been raised for this: 68110.Righto.
--
Adam