Массивы с динамическим именем ключа

Опубликовано Опубликовано в рубрике PHP

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

Для чего это может пригодиться? В том же Drupal 7 API при программной генерации страниц требуется работать с массивом $items, а его ключом будет являться относительный адрес страницы. Для того, чтобы этот адрес генерировался «откуда-то», и пригодится сегодняшняя заметка.

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

Не далее, чем вчера я вспомнил, что в PHP есть такая замечательная вещь, как переменная переменных, которая может генерировать динамическое имя переменной. А чем массив не переменная?

Решение родилось тут же строки в три.

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

$name = "array['ololo']";

Далее объявим сам массив array. А теперь можем в динамике создать ячейку с ключом ‘ololo’, в которое положим значение

$$name = "This is value";

Здесь-то мы и применили «плюшку» переменной переменных! $$name создает переменную с именем array[‘ololo’], т.е. ничто иное, как массив, в котором объявляется ячейка с ключом ‘ololo’!

Проверить себя предельно просто. Выведем на экран значения в статике и в динамике:

print $$name; //динамика
print $array['ololo']; //статика

Совпадают? Задача решена!

Теперь ничто не мешает нам создать статическую часть строки в виде «array» и с помощью конкатенации строк добавлять туда необходимые ключи любым удобным способом!

Безошибочного Вам кода!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *