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

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

$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;, дабы не городить лишние проверки и строки кода.

Спасибо за помощь!
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 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, но это хреновое решение.
куча вложенных объектов это не всегда быстро.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 19:05
15000 руб./за проект
23 апр. 2024, в 19:01
7000 руб./за проект
23 апр. 2024, в 18:47
10000 руб./за проект