Элементы массива разметки PHP

У меня есть 2 массива.

$result = array(); $row = array(); 

Элементы Row являются ссылками и постоянно меняются. Для каждой итерации $row я хочу скопировать значения строки в запись $result а не ссылки.

Я нашел несколько решений, но все они кажутся довольно ужасными.

 $result[] = unserialize(serialize($row)); $result[] = array_flip(array_flip($row)); 

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

Есть ли более чистый способ сделать это? Если бы не самый эффективный способ?

Благодарю.

EDIT: Как было предложено ниже, например:

 function dereference($ref) { $dref = array(); foreach ($ref as $key => $value) { $dref[$key] = $value; } return $dref; } $result[] = dereference($row); 

Также работает, но кажется столь же уродливым.

Solutions Collecting From Web of "Элементы массива разметки PHP"

Не уверен, что я полностью понимаю вопрос, но вы можете использовать рекурсию?

 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); 

Расширение функции выше, как следует, решена проблема, которую я имел:

 function array_copy($source) { $arr = array(); foreach ($source as $element) { if (is_array($element)) { $arr[] = array_copy($element); } elseif (is_object($element)) { // make an object copy $arr[] = clone $element; } else { $arr[] = $element; } } return $arr; }