У меня есть несколько ключей массива php, которые заполнены множеством странных символов.
Это разрешено? Существуют ли какие-либо ограничения на то, что я не могу использовать?
Согласно руководству :
Ключ может быть целым числом или строкой. Значение может быть любого типа.
Кроме того, будут выполняться следующие нажатия клавиш:
- Строки, содержащие действительные целые числа, будут переданы в целочисленный тип. Например, ключ «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);
Ключ должен быть строкой или целым числом. Есть несколько отливок, которые имеют место, но я думаю, что руководство действительно помогает объяснить:
Ключ может быть целым числом или строкой. Значение может быть любого типа.
Кроме того, будут выполняться следующие нажатия клавиш:
- Строки, содержащие действительные целые числа, будут переданы в целочисленный тип. Например, ключ «8» будет фактически сохранен под 8. С другой стороны, «08» не будет выбрано, так как это не допустимое целое число.
- Поплавки также отливаются от целых чисел, что означает, что дробная часть будет усечена. Например, ключ 8.7 будет фактически сохранен под 8.
- Bools также отлиты от целых чисел, т. Е. Ключ true будет фактически сохранен под 1 и ключ false под 0.
- Null будет передан в пустую строку, т. Е. Нулевой ключ будет фактически сохранен под "".
- Массивы и объекты не могут использоваться в качестве ключей. Это приведет к предупреждению: тип недопустимого смещения.
Я нашел этот ответ для поиска дополнительной информации о проблеме, которую я имел. Я использовал строки с символами 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!
Все, что вы можете вставить в строку PHP, можно использовать в качестве ключа массива. Для допустимых символов нет ограничений.
$a = array(); $x = 'long string of random garage'; echo $a[$x]; // this is ok $x = array(); echo $a[$x]; // not ok
Ключи массива PHP могут быть целыми числами или строками. Строки PHP представляют собой байтовые массивы, означающие последовательности байтов. Других типов строк нет, и PHP иначе не накладывает никаких особых ограничений на строки ключей массива. Другими словами: до тех пор, пока это строка, все идет.
У меня лично не было проблем с необычными символами в клавишах массива. То, что является и не является законным, недостаточно хорошо документировано, кроме как сказать, что ключ должен быть скаляром. Лучше всего просто попробовать и посмотреть.
В дополнение ко всем ответам, поскольку они верны: вы можете использовать PSR, что они представляют собой какие-то правила между лучшими программистами за хороший стиль и стандартный стиль кодирования.