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 關注
- 163 瀏覽
添加回答
舉報