PHP предотвращает цикл foreach от перезаписывания объекта

Это уже четвертый раз, когда я пробовал написать этот вопрос, поэтому, пожалуйста, несите меня.

У меня есть объект PHP, который поступает из запроса DB, который отбрасывает следующие данные:

[1] => stdClass Object ( [eventId] => 11 [eventName] => Second Event [...] [eventChildren] => Array ( [0] => stdClass Object ( [childId] => 8 [childName] => Jane Doe [...] [gifts] => Array ( [0] => stdClass Object ( [giftId] => 73 [giftName] => My two front teeth [childId] => 8 [userId] => 1 [eventId] => 11 ) [1] => stdClass Object ( [giftId] => 74 [giftName] => Wasps [childId] => 8 [userId] => 1 [eventId] => 11 ) ) ) ) ) ) 

Затем я запускаю массивную серию циклов foreach , чтобы сравнить userId из массива gifts с userId хранящимся в cookie сеанса.

Из этих циклов я создаю массив детей и подарки, которые пользователь выбрал.

Проблема заключается в том, что это вместо моего нового объекта заменяет мой основной объект.

Циклы:

 $user = $this->session->userdata('user'); $tempEvents = $events; $userSelection = array(); $flag = FALSE; foreach ( $tempEvents as $i => $event ) { if ( $i == 0 ) { foreach ( $event->eventChildren as $child ) { $userGift = array(); foreach ( $child->gifts as $gift ) { if ( $gift->userId == $user['userId'] ) { array_push($userGift, $gift); $flag = TRUE; } } $tempChild = $child; $tempChild->gifts = $userGift; if ( $flag ) { array_push($userSelection, $tempChild); $flag = FALSE; } } } } 

Если I print_r($events); он отображает отредактированный список, а не полный список событий. Есть ли способ создать дублирующий объект и изменить его, а не редактировать исходный объект?

Solutions Collecting From Web of "PHP предотвращает цикл foreach от перезаписывания объекта"

Причиной «перезаписи» является $tempChild = $child; ,

Это не приведет к глубокому копированию содержимого $child но при этом оба параметра $tempChild и $child указывают на одну и ту же структуру данных, что явно не желательно в этом случае.

Вы должны использовать clone как в приведенном ниже примере.

 $tempChild = clone $child; 

  • PHP: клонирование объектов – руководство

Пытаться

 $tempEvents = clone $events;