У меня есть 2 массива.
$result = array();
$row = array();
Элементы строки являются всеми ссылками, и постоянно изменяется. Для каждого повторения $row
Я хочу скопировать значения строки в запись $result
а не ссылки.
Я нашел несколько решений, но они все кажутся довольно ужасными.
$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));
Обе из вышеупомянутой работы, но походят на большое количество ненужного и ужасного кода только для копирования содержания массива ссылок значением, вместо того, чтобы копировать сами ссылки.
Существует ли более чистый способ выполнить это? Если бы не, каков самый эффективный путь был бы?
Спасибо.
Править: Как предложено ниже чего-то, такого как:
function dereference($ref) {
$dref = array();
foreach ($ref as $key => $value) {
$dref[$key] = $value;
}
return $dref;
}
$result[] = dereference($row);
Также работы, но кажутся одинаково ужасными.
Не уверен, что полностью понимаю вопрос, но можете ли вы использовать рекурсию?
function array_copy($source) {
$arr = array();
foreach ($source as $element) {
if (is_array($element)) {
$arr[] = array_copy($element);
} else {
$arr[] = $element;
}
}
return $arr;
}
$result = array();
$row = array(
array('a', 'b', 'c'),
array('d', 'e', 'f')
);
$result[] = array_copy($row);
$row[0][1] = 'x';
var_dump($result);
var_dump($row);