PHP: Ассоциативные массивы
Теория: Деструктуризация
Напомню, что деструктуризация (дестракчеринг) — специальный синтаксис, позволяющий извлекать части из составных данных. Самый простой пример, который мы рассмотрели, — извлечение значений массива из двух элементов.
На части можно раскладывать не только индексированные, но и ассоциативные массивы, извлекая из них значения по определённым ключам.
Теперь переменные $lastname и $firstname содержат соответствующие значения. Имена самих переменных выбираются произвольно, главное — совпадение по ключам.
PHP допускает вложенную деструктуризацию. С ее помощью можно получать значения не только внешнего массива, но и вложенных.
Деструктуризацию ассоциативного массива можно комбинировать с деструктуризацией индексированного.
Деструктуризация возможна и в циклах:
Извлечение
Кроме описанного выше, в PHP существует ещё один способ деструктуризации, который на первый взгляд кажется проще. Вызов функции extract с переданным ассоциативным массивом приводит к тому, что создаются переменные с именами ключей, в которые записываются значения из массива.
Ни в одном другом популярном языке нет возможности создать переменные без явного определения переменных. Данный способ обладает массой недостатков и поэтому не рекомендуется к использованию. Перечислим их:
- Переменные всегда создаются для всех ключей массива. Они засоряют локальное окружение и могут приводить к ошибкам если пересекутся с названиями уже существующих переменных.
- Безопасность. Если содержимое массива приходит извне (из формы или базы данных), то есть потенциальная вероятность попадания в массив ключа, который приведёт к перезаписыванию значения существующей переменной.
- Неявное создание переменных вообще само по себе странная штука (и нигде не встречается!). Такой код значительно сложнее в анализе.

