分隔数组中的引用
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)
}
}
在此数组中,数组中的 foo
和 bar
键都引用同一个数组,但我需要它们是单独的数组。
有没有办法把一个数组中的所有引用都剪掉?
注意:我的代码生成的实际数组比这 多 复杂,有很多层和引用。我宁愿不必通过数组强制删除引用,但任何解决方案都比 none.
我试图改变我的代码生成它的方式来修复引用,但由于我使用的算法,它不起作用。我可以修复它的唯一方法是重写我的整个生成器,不使用引用开始。 (我真的很想不必那样做)
我想不出一个简单的方法,所以这是我比较粗略的解决方案;只需复制所有内容:
function clone_array(array $arr)
{
$res = [];
foreach ($arr as $k => $v) {
$res[$k] = is_array($v) ? clone_array($v) : $v;
}
return $res;
}
我在 var_dump
中有一个看起来像这样的数组:
array(2) {
["foo"] => &array(2) {
["hello"] => string(5) "world"
["number"] => float(21)
}
["bar"] => &array(2) {
["hello"] => string(5) "world"
["number"] => float(21)
}
}
在此数组中,数组中的 foo
和 bar
键都引用同一个数组,但我需要它们是单独的数组。
有没有办法把一个数组中的所有引用都剪掉?
注意:我的代码生成的实际数组比这 多 复杂,有很多层和引用。我宁愿不必通过数组强制删除引用,但任何解决方案都比 none.
我试图改变我的代码生成它的方式来修复引用,但由于我使用的算法,它不起作用。我可以修复它的唯一方法是重写我的整个生成器,不使用引用开始。 (我真的很想不必那样做)
我想不出一个简单的方法,所以这是我比较粗略的解决方案;只需复制所有内容:
function clone_array(array $arr)
{
$res = [];
foreach ($arr as $k => $v) {
$res[$k] = is_array($v) ? clone_array($v) : $v;
}
return $res;
}