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

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

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

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

Спасибо за помощь!
  • Вопрос задан
  • 130 просмотров
Подписаться 2 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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, но это хреновое решение.
куча вложенных объектов это не всегда быстро.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽