Arrays with NULL keys

PhpArraysNull

Php Problem Overview


PHP trivia here.

If we declare an array like this:

<?php $arr = [ 'foo' => 'bar', NULL => 'hello' ]; ?>

We can access it like this

print $arr[NULL];

This will print hello. Why is this useful, relevant or necessary? Is it a PHP bug or a feature?

My only idea was that you could declare array with the NULL key being equal to an error message to explain to anyone who uses a NULL key that their key is null:

$arr[NULL] = 'Warning you have used a null key, did you mean to?';

Has anyone found this useful? Seems to be something to cause more harm than good.

Php Solutions


Solution 1 - Php

Quote from the manual:

> Null will be cast to the empty string, i.e. the key null will actually > be stored under "".

Additional details about how keys are cast are as follows:

> The key can either be an integer or a string. The value can be of any > type. > > Additionally the following key casts will occur: > > - Strings containing valid decimal integers, unless the number is preceded by a + sign, will be cast to the integer type. E.g. the key > "8" will actually be stored under 8. On the other hand "08" will not > be cast, as it isn't a valid decimal integer. > - Floats are also cast to integers, which means that the fractional part will be truncated. E.g. the key 8.7 will actually be stored under > 8. > - Bools are cast to integers, too, i.e. the key true will actually be stored under 1 and the key false under 0. > - Null will be cast to the empty string, i.e. the key null will actually be stored under "". > - Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type.

As for this being useful or necessary, this is debatable. You are asked to use integer or string keys and you have been warned about implicit key casting.

Solution 2 - Php

I have found the possibility to have Null keys useful, when accessing db, using a class, which can use one of the column values as the key to the returned array. Some column values could be null.

Solution 3 - Php

Given a form API populated by an associative php array, I have found it useful to use a null-keyed value to indicate the NULL value in a database. E.g.:

$this->addElement('select', 'foreignkey_id', array(
  'label'=>'Add a Poll',
  'multiOptions' => array(
      null => 'No value selected',
      '0' => 'Element with ID0 selected'
  )
));

In this case, null maps to a NULL (default) value in the database column foreignkey_id, and 0 to a row with key 0.

Outside this particular usecase however, I tend to think DCoder's comment is authoritative here...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionddoorView Question on Stackoverflow
Solution 1 - PhpSalman AView Answer on Stackoverflow
Solution 2 - PhpmikewasmikeView Answer on Stackoverflow
Solution 3 - PhpDMCodingView Answer on Stackoverflow