У меня есть следующий код:
$data['x'] = $this->x->getResults();
$data['y'] = $data['x'];
//some code here to modify $data['y']
//this causes (undesirably) $data['x] to be modified as well
Я думаю, поскольку все элементы $data сами являются ссылками, модификация $data ['y'] также модифицирует $data ['x'].., который НЕ является тем, что я хочу. Я хочу, чтобы $data ['x'] оставался прежним. Есть ли способ разыменовать элементы здесь, чтобы я мог копировать элементы по значению?
Спасибо.
Обновление: $this- > x- > getResults(); возвращает массив объектов. Поэтому я могу сделать что-то вроде: $data ['x'] [0] → date_create...
Обновление: моя последняя попытка клонировать массив выглядит примерно так:
$data['x'] = $this->x->getResults();
$data['y'] = $data['y'];
foreach($data['x'] as $key=>$row) {
$data['y'][$key]->some_attr = clone $row->some_attr;
}
Неужели я здесь? Я продолжаю получать ошибку "__clone метод, вызванный не-объектной" ошибкой. От чтения ответов кажется, что мой лучший вариант - перебрать каждый элемент и клонировать его (это то, что я пытался сделать с этим кодом..).
UPDATE: просто решил!: внутри цикла foreach мне просто нужно было изменить строку:
$data['y'][$key] = clone $row;
И это работает! Спасибо всем за помощь.