PHP解引用数组元素

ano*_*reh 6 php arrays reference dereference

我有2个阵列.

$result = array();
$row = array();
Run Code Online (Sandbox Code Playgroud)

Row的元素都是引用,并且不断变化.对于每次迭代,$row我想将行的复制到条目$result而不是引用.

我找到了一些解决方案,但它们看起来都很糟糕.

$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));
Run Code Online (Sandbox Code Playgroud)

上面的两个工作,但似乎是很多不必要和丑陋的代码只是通过值复制引用数组的内容,而不是复制引用本身.

有没有更清洁的方法来实现这一目标?如果不是最有效的方式是什么?

谢谢.

编辑:如下所示,例如:

function dereference($ref) {
    $dref = array();

    foreach ($ref as $key => $value) {
        $dref[$key] = $value;
    }

    return $dref;
}

$result[] = dereference($row);
Run Code Online (Sandbox Code Playgroud)

也有效,但看起来同样丑陋.

Ros*_*der 4

不确定我完全理解这个问题,但是你可以使用递归吗?

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);
Run Code Online (Sandbox Code Playgroud)