Это уже четвертый раз, когда я пробовал написать этот вопрос, поэтому, пожалуйста, несите меня.
У меня есть объект 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);
он отображает отредактированный список, а не полный список событий. Есть ли способ создать дублирующий объект и изменить его, а не редактировать исходный объект?
Причиной «перезаписи» является $tempChild = $child;
,
Это не приведет к глубокому копированию содержимого $child
но при этом оба параметра $tempChild
и $child
указывают на одну и ту же структуру данных, что явно не желательно в этом случае.
Вы должны использовать clone
как в приведенном ниже примере.
$tempChild = clone $child;
Пытаться
$tempEvents = clone $events;