Где меняется $items?

208
10 апреля 2017, 07:51

Почему массив $items после обработки в цикле добавляет к своим элементам subcategories я же работаю с масcивом $pointers?

$pointers = array();

    foreach ($items as $key => $item) 
    {
        if(isset($item->perent_external_id))
        {
            if(isset($pointers[$item->perent_external_id]))
            {
                $pointers[$item->external_id] = $item;
                $pointers[$item->perent_external_id]->subcategories[] = $items[$item->external_id];
                unset($items[$key]);
            }
        }
        else
            $pointers[$item->external_id] = $item;
    }
    print_r($items);
Answer 1

ммм... по ходу $item у тебя объект, а объекты копируются по ссылке. Сначала ты пишешь эту строчку

* $pointers[$item->external_id] = $item;

то есть копируешь объект $item в массив $pointers, а потом

$pointers[$item->perent_external_id]->subcategories[] = $items[$item->external_id]

присваиваешь подкатегорию как бы элементу массива $pointers, но из-за первой (*) строчки этот элемент указывает на объект $item, так как объекты копируются по ссылке и в итоге получается, что у объектов из массива $items есть подкатегории. Я так понимаю происходящее.

READ ALSO
Реализовать класс Rectangle c++

Реализовать класс Rectangle c++

Помогите пожалуйста с реализацией класс RectangleНужно создать два приватных поля(значения целочисленные для сторон прямоугольника), методы...

285
Бинарный поиск с счётчиком

Бинарный поиск с счётчиком

Дают число n и нужно вывести сколько таких чисел в массиве, используя бинарный поиск

213
Передача по ссылке и nullptr

Передача по ссылке и nullptr

Пишу функцию на с++ типа:

211
С++ Регулярные выражения. Рекурсия?

С++ Регулярные выражения. Рекурсия?

Здравствуйте, имею задачу получить список содержимого между пар (

312