Неплохо ли использовать пробелы в индексах ассоциативных массивов PHP?

Мне нужно передать некоторые параметры с помощью ассоциативного массива, примерно так:

$blockGroup['name=products type=complete'] 

Выполняя некоторые тесты, я увидел, что он работает, но это плохая практика? Можно ли генерировать любую ошибку или неожиданное поведение?

Спасибо за любое предложение!

ИЗМЕНИТЬ 1

Я использую этот массив в реализации представления, полная структура:

 $blockGroup['name=products type=complete'][] = array( 'name' => 'GeForce', 'value' => '99.99' ); 

Solutions Collecting From Web of "Неплохо ли использовать пробелы в индексах ассоциативных массивов PHP?"

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

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

 $scores = array("John Doe" => 100, "Ivan Ivanovich" => 75.3); 

Я вижу, что вы пытаетесь использовать ключи массива в качестве выражения, что является ДЕЙСТВИТЕЛЬНО плохой практикой. Вещи предназначены для того, для чего они предназначены. Используйте ассоциативные ключи как ассоциативные ключи.

Это будет работать, и это неплохая практика . Пробел – это просто обычный символ в индексной строке. Нет проблем с этим.

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

file.txt

 hello world. foo bar hello world 123 

example.php

 $printed = array(); foreach(file('file.txt') as $line) { if(isset($printed[$line])) { continue; // skip the line } echo $line; $printed[$line] = true; // line will contain spaces } 

Отвечая на ваш исходный вопрос, связанные массивы в ключах карты PHP со значениями. В этом случае ключи, которые вы используете, являются строками, в этом случае все PHP заботится, не обязательно содержимое этих строк (т. Е. Что они могут иметь или не иметь пробелов). Я говорю это, так как вы, похоже, не уверены в том, является ли это законным на языке (а не только, была ли это плохая практика).

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

Это допустимый синтаксис, но это может быть лучший способ добиться того, что вы пытаетесь сделать.

Массивы могут иметь целые, FLOating, Null, Bool и String ключи.

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

Однако, на мой взгляд, он делает код менее читаемым и более склонным к ошибкам, неправильно набрав ключ и потратив бесчисленные часы, чтобы узнать, что вы должны были ввести

$myKey['name=guitar price=200.00']

вместо:

$myKey['name=gutiar price=200.00']

на странице руководства PHP дается подробное объяснение, почему это плохая практика:

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

http://php.net/manual/en/language.types.array.php

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

 $blockGroup['products']['complete'][] = array( 'name' => 'GeForce', 'value' => '99.99' ); 

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

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

Я предполагаю, что что-то подобное может вызвать головные боли в будущем. Больше места для орфографических ошибок ИМО. Плюс это не очень приятно смотреть.

Имейте в виду, я специально ссылаюсь на ваш пример. Что-то в этом роде прекрасно:

 array('toaster oven' => 100, 'heater' => 50);