@mShpakov

Почему запись в массив перетирает объект?

Есть такой код:
$sorted = [];
foreach ($elements as $element_index => $element) {
                    foreach ($element->locations as $location_index => $location) {
                        $to_push = $element;
                        if ($to_push->field_type === 1 or $to_push->field_type === 2 or $to_push->field_type === 4 or $to_push->field_type === 8) {
                            $to_push->text_format = $location->text_format;
                        }
                        $to_push->position = $location->position;
                        $sorted[$to_push->position->page][] = $to_push;
                    }
                
            }

$elements это модель Eloquent
Проблема в том, что
$sorted[$to_push->position->page][] = $to_push;
И вот например у нас есть две итерации для $element->locations у которых номер страницы будет одинаковый
Тогда в массиве у нас будет два одинаковых элемента равных последней итерации.

Поведение очень странное, не могу понять из-за чего так происходит, уже задолбался обкладываться дампами со всех сторон. Внутри итераций действительно разные значение, а в $sorted одинаковые.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 2
Я не понял вопрос, но по коду проблема скорее всего тут:
$to_push = $element;
$to_push->position = $location->position;

В итоге в $sorted = []; у нас 2 одинаковых значения, соответствующие последней итерации, т.к объекты передаются ссылками.
Ответ написан
@mShpakov Автор вопроса
Проблема решена заменой $to_push = $element;
На $to_push = clone $element;

Спасибо Илья Герасимов за наводку
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы