Я использую PHP для работы с API, который требует от меня определения таких массивов:
$array = [ "A" => [ [ "AA" => "Z" ], [ "BB" => "Z" ] ], "B" => "Z" ];
Когда я жестко запрограммирую значения, нет проблем, но как правильно воссоздать эту структуру массива с переменными?
Что-то типа:
$array = array('A' => array('AA' => 'Z','BB' => 'Z'),'B' => 'Z'); ?
Или я должен использовать фигурные скобки или что-то еще?
Мне нужно иметь возможность отправлять в API правильно отформатированную переменную, а не просто значения жесткого кода.
Фигурные скобки не используются для массивов в PHP.
«правильно отформатированная переменная для API» звучит так, как будто вы ищете JSON — если это то, что вам нужно, то json_encode($array) даст вам «фигурные скобки»...
Ваши два массива не эквивалентны. В первом A указывает на двумерный массив, во втором — на один ассоциативный массив.
@Barmar, на самом деле, вы можете использовать фигурные скобки для доступа к массиву: 3v4l.org/BZ7tp
@krlv Но он говорит о создании массивов, а не о доступе к ним. Обозначение, которое вы показали, не рекомендуется, я думаю, что это просто какая-то древняя вещь совместимости.
@krlv И, насколько мне известно, этот синтаксис недокументирован, я не знаю, поддерживается ли он официально. Это больше мелочи, чем что-либо еще.
@ Бармар Правда. Кроме того, я надеюсь, что скоро он будет устаревшим: wiki.php.net/rfc/deprecate_curly_braces_array_access






array() и [] эквивалентны, за исключением того, что краткая форма поддерживается только в PHP 5.4 или новее.
Фигурные скобки {} не связаны с массивами, это совершенно другое, и их не следует смешивать.
В качестве «странной заметки» (и что привлекло меня к этому вопросу) — буквально вчера я боролся с проблемой, используя только [] — хостинговая компания (HostGator) не принимает [] в своей версии (кажется, они изменяют ее.. . :( PHP 5.4, 5.5 или 5.6...... Нам нужно обновить клиентский сервер и перейти на 7.X, но другое программное обеспечение останавливает его - и промежуточный материал использует [], что дает ошибки...... (AAARRRGGGHHHH!) поэтому мне, возможно, придется изменить тысячи [] на array() только для того, чтобы быть совместимым с хостинговой компанией!(да, я рекомендовал изменить.... :)
Я очень сомневаюсь, что кто-то модифицировал php, чтобы не поддерживать эту функцию, так как это было бы действительно очень глупо. И если вы правы (опять же, я в этом сомневаюсь), то последнее, о чем я бы подумал, это модифицировать какое-либо из моих программ вместо того, чтобы переходить к обычному провайдеру с неповрежденным PHP.
Нет никакой разницы между использованием квадратных скобок и использованием функции
array(). Вы можете использовать переменные в обоих.