Массивы с нулевыми ключами


PHP мелочи здесь.

Если мы объявим массив следующим образом:

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

Мы можем получить к нему доступ Вот так

print $arr[NULL];

Это выведет hello. Почему это полезно, уместно или необходимо? Это ошибка PHP или функция?

Моя единственная идея состояла в том, что вы можете объявить массив с нулевым ключом, равным сообщению об ошибке, чтобы объяснить любому, кто использует нулевой ключ, что их ключ равен нулю:

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

Нашел ли кто-нибудь это полезным? Кажется, что-то может причинить больше вреда, чем хороший.

3 39

3 ответа:

Цитата из руководства:

Null будет приведено к пустой строке, то есть ключ null будет фактически храниться в разделе "".

Дополнительные сведения о приведении ключей следующие:

Ключ может быть целым числом или строкой. Ценность может быть любой тип.

Кроме того, произойдут следующие приведения ключей:

  • строки, содержащие допустимые десятичные целые числа, если перед числом не стоит знак + , будет приведен к целочисленному типу. Например, ключ "8" на самом деле будет храниться под 8. С другой стороны "08" не будет приведите, так как это не допустимое десятичное целое число.
  • Поплавки также приводятся к целым числам, что означает, что дробная часть будет усечена. Например, ключ 8.7 будет фактически храниться под 8.
  • Bools также приводятся к целым числам, то есть ключ true будет фактически сохранен под 1, а ключ false-под 0.
  • Null будет приведено к пустой строке, т. е. ключевое значение null на самом деле будет храниться в разделе "".
  • Массивы и объекты не могут использоваться в качестве ключей. Это приведет к появлению предупреждения: недопустимый тип смещения.

Что касается полезности или необходимости этого, то это спорно. Вас попросят использовать целочисленные или строковые ключи, и вы будете предупреждены о неявном приведении ключей.

Я нашел возможность иметь нулевые ключи полезными при обращении к БД, используя класс,который может использовать одно из значений столбца в качестве ключа к возвращаемому массиву. Некоторые значения столбцов могут иметь значение null.

Учитывая API формы, заполненный ассоциативным массивом php, я счел полезным использовать значение с нулевым ключом для указания нулевого значения в базе данных. Например:

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

В этом случае null соответствует нулевому (по умолчанию) значению в столбце базы данных foreignkey_id, а 0-строке с ключом 0.

Вне этой конкретной usecase, однако, я склонен думать, что комментарий DCoder является авторитетным здесь...