2 回答
TA贡献1875条经验 获得超3个赞
您可以通过将引用存储在数组的引用中来完成第一个,如下所示:
$all = [
'nested_arrays' => [
'id0' => [
'id8' => [
'hello'
],
'id3' => [
'id6' => 'apple'
]
]
],
];
$all['references']['id0'] = &$all['nested_arrays']['id0'];
$all['references']['id8'] = &$all['nested_arrays']['id0']['id8'];
$all['references']['id6'] = &$all['nested_arrays']['id0']['id3']['id6'];
然后检查输出:
echo '<pre>'. print_r($all['references']['id8'], true) . '</pre>';
echo '<pre>'. print_r($all['references']['id6'], true) . '</pre>';
输出:
Array
(
[0] => hello
)
apple
但是你不能对此使用 unset ,因为那只会删除数组的元素,而不是它指向的数组元素。
TA贡献1826条经验 获得超6个赞
我宁愿创建一个实现迭代器接口的对象。对象本质上是通过引用传递的。
$id0 = new MyIterator($array);
$all = [
'nested_arrays' => [
'id0' => $id0
],
'references' => [
'id0' => $id0
]
];
替代方法是递归迭代“nested_array”并填充“references”数组
foreach ($nested as $k => $v) {
// Custom recursive iteration
...
$all['references'][$k] = &$v;
}
通常,您不能通过取消设置引用来删除原始值或对象。只有当指向该值的所有指针都被取消设置时,原始值才会被销毁。您将不得不遍历数组。
- 2 回答
- 0 关注
- 131 浏览
添加回答
举报