Задать вопрос

Как присвоить новому свойству объекта массив?

Хелоу всем. Имеется такой код

$tree = [];
        $data = $this->data;

        foreach ($data as $id => $node) {
            if (!$node->parent) {
                $tree[$id] = $node;
            } else {
                if (isset($data[$node->parent]->childs)){
                    $childs = $data[$node->parent]->childs;
                    $childs[] = $data[$node->parent]->childs = [$id => $node];
                    $data[$node->parent]->childs = $childs;
                } else {
                    $data[$node->parent]->childs = [$id => $node];

                }
            }
        }


Есть ли какой-то способ записывать не так $data[$node->parent]->childs = [$id => $node];, а как то так $data[$node->parent]->childs[] = $node;, дабы не городить лишние проверки и строки кода.

Спасибо за помощь!
  • Вопрос задан
  • 128 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Может как-то так:
if (isset($data[$node->parent]->childs)){
  $data[$node->parent]->childs = [];
}
$data[$node->parent]->childs[] = [$id => $node];

т.е. если свойства нет - ицициализируете его как пустой массив и дальше уже как с обычным массивом - добавляете в него элементы.
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
$data[$node->parent]->childs = [$id => $node];
и
$data[$node->parent]->childs[] = $node;
не равнозначны.
подобное можно реализовать через ArrayAccess и/или магию __get/__set, но это хреновое решение.
куча вложенных объектов это не всегда быстро.
Ответ написан
Ваш ответ на вопрос

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

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