lep*_*epe 15 php arrays reference pass-by-reference
很抱歉问,它已经迟到了,我无法想办法......任何人都可以帮忙吗?
$users = array(
array(
"name" => "John",
"age" => "20"
),
array(
"name" => "Betty",
"age" => "22"
)
);
$room = array(
"furniture" => array("table","bed","chair"),
"objects" => array("tv","radio","book","lamp"),
"users" => &$users
);
Run Code Online (Sandbox Code Playgroud)
var_dump $ room显示:
...
'users' => &
...
Run Code Online (Sandbox Code Playgroud)
这意味着"用户"是一个参考.
我想做这样的事情:
foreach($room as $key => $val) {
if(is_reference($val)) unset($room[$key]);
}
Run Code Online (Sandbox Code Playgroud)
主要目标是复制数组而不引用任何引用.
那可能吗?
谢谢.
您可以通过复制数组来测试多维数组中的引用,然后依次更改和测试每个条目:
$roomCopy = $room;
foreach ($room as $key => $val) {
$roomCopy[$key]['_test'] = true;
if (isset($room[$key]['_test'])) {
// It's a reference
unset($room[$key]);
}
}
unset($roomCopy);
Run Code Online (Sandbox Code Playgroud)
使用您的示例数据,$room['furniture']并且$roomCopy['furniture']将是单独的数组(作为$roomCopy副本$room),因此向其中添加新密钥不会影响另一个.但是,$room['users']并且$roomCopy['users']将引用相同的$users数组(因为它是复制的引用,而不是数组),所以当我们添加一个键时,$roomCopy['users']它是可见的$room['users'].