分隔数组中的引用

Separating References in an Array

我在 var_dump 中有一个看起来像这样的数组:

array(2) {
  ["foo"] => &array(2) {
    ["hello"] => string(5) "world"
    ["number"] => float(21)
  }
  ["bar"] => &array(2) {
    ["hello"] => string(5) "world"
    ["number"] => float(21)
  }
}

在此数组中,数组中的 foobar 键都引用同一个数组,但我需要它们是单独的数组。

有没有办法把一个数组中的所有引用都剪掉?

注意:我的代码生成的实际数组比这 复杂,有很多层和引用。我宁愿不必通过数组强制删除引用,但任何解决方案都比 none.

我试图改变我的代码生成它的方式来修复引用,但由于我使用的算法,它不起作用。我可以修复它的唯一方法是重写我的整个生成器,不使用引用开始。 (我真的很想不必那样做)

我想不出一个简单的方法,所以这是我比较粗略的解决方案;只需复制所有内容:

function clone_array(array $arr)
{
    $res = [];
    foreach ($arr as $k => $v) {
        $res[$k] = is_array($v) ? clone_array($v) : $v;
    }
    return $res;
}