PHP разыменовывают элементы массива

У меня есть 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);

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

6
задан anomareh 2 March 2010 в 03:52
поделиться

1 ответ

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

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);
4
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: