Символы, разрешенные в ключах php-массива?

У меня есть несколько ключей массива php, которые заполнены множеством странных символов.

Разрешено ли это? Существуют ли какие-либо ограничения для того, что я не могу использовать?

Ответ 1

В соответствии с manual:

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

Кроме того, будут выполняться следующие нажатия клавиш:

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

Руководство :

Строка - это серия символов, где символ совпадает с байтом. Это означает, что PHP поддерживает только 256-символьный набор и, следовательно, не предлагает поддержку родного Unicode. Подробнее о типе строки.

Короче говоря, любая строка может быть ключом. И строка может содержать любые двоичные данные (до 2 ГБ). Следовательно, ключ может быть любым двоичным данным (поскольку строка может быть любыми двоичными данными).

Некоторые случайные (действительные) злоупотребления ключами массива:

$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);

Ответ 2

Ключ должен быть строкой или целым числом. Есть несколько отливок, которые имеют место, но я думаю, что руководство действительно помогает объяснить:

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

Кроме того, будут выполняться следующие нажатия клавиш:

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

Ответ 3

Я нашел этот ответ для поиска дополнительной информации о проблеме, которую я имел. Я использовал строки с символами UTF-8, которые не будут работать как ключи к массиву, который у меня был.

Что-то вроде

$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str];  // did not work

Для меня было (не большое или умное) решение.

$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str];  // works!

Ответ 4

Все, что вы можете вставить в строку PHP, можно использовать в качестве ключа массива. Нет допустимых ограничений на допустимые символы.

$a = array();

$x = 'long string of random garage';
echo $a[$x]; // this is ok

$x = array();
echo $a[$x]; // not ok

Ответ 5

Ключи массива PHP могут быть целыми числами или строками. Строки PHP представляют собой байтовые массивы, означающие последовательности байтов. Других типов строк нет, и PHP иначе не накладывает никаких особых ограничений на строки ключей массива. Другими словами: до тех пор, пока это строка, все идет.

Ответ 6

У меня лично не было проблем с необычными символами в ключах массива. То, что является и не является законным, недостаточно хорошо документировано, кроме как сказать, что ключ должен быть скаляром. Лучше всего просто попробовать и посмотреть.

Ответ 7

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

Ответ 8

Кодирование php-страницы в ANSI "é" сможет использовать (Cinéma не будет отображаться как Cinà ma). В Notepad++ просто используйте меню Encode => Convert ANSI и сохраните