Roquie
@Roquie

Как реализовать Dot-notation в перебираемом массиве?

Есть ли интерфейс для реализиации такой возможности? Гуглил - не нашел.

$collection['root.name']; // работает благодаря ArrayAccess
foreach ($collection as $value)
      echo $value['foo.bar.baz']; // не работает, т.к. это уже не объект коллекции


и не сильно ли накладно, на каждую итерацию создавать объект?
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 2
He11ion
@He11ion
PHP-monkey
Могу ошибиться, но я бы сделал так:
foreach ($collection as $key => $value) {
    <тут обращение к элементу $collection по ключу $key, 
      который будет реализовывать ArrayAccess>
}
Ответ написан
mr_T
@mr_T
Web-разработчик
В классе, реализующем ArrayAccess, в методе offsetSet отщепляешь левую часть ключа до точки, далее:
- Если у ключа не осталось правой части (то есть нет точек) - просто задаешь значение по ключу у $this -> collection (ну или как у тебя поле со значениями обозвано)
- Если осталась - при отсутствии значения по ключу инициализируешь его как new static
- Задаешь значение в дочерней коллекции по оставшемуся "хвосту" ключа

Ну и как offsetGet при этом реализовать, думаю, понятно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы