Php 如何用元素的值替换对元素的引用?
在tl的情况下;dr:使用引用设置数组,然后更改所述数组的副本仍然保留引用,同时更改所有副本的元素。需要一种变通方法,用引用所指向的值替换引用 我在PHP数组中使用引用时遇到了一个复杂的问题:( 我有一个唯一元素的平面数组,具有两个属性:顺序和级别。 顺序表示元素的顺序号,从1到n,以类似的目录方式。级别表示元素的“子章”级别 例如: 第一个括号是随机但唯一的元素ID:Php 如何用元素的值替换对元素的引用?,php,arrays,recursion,reference,Php,Arrays,Recursion,Reference,在tl的情况下;dr:使用引用设置数组,然后更改所述数组的副本仍然保留引用,同时更改所有副本的元素。需要一种变通方法,用引用所指向的值替换引用 我在PHP数组中使用引用时遇到了一个复杂的问题:( 我有一个唯一元素的平面数组,具有两个属性:顺序和级别。 顺序表示元素的顺序号,从1到n,以类似的目录方式。级别表示元素的“子章”级别 例如: 第一个括号是随机但唯一的元素ID: [1][order:1][level:1] ----[7][order:2][level:2] ----[4][order:3
[1][order:1][level:1]
----[7][order:2][level:2]
----[4][order:3][level:2]
---- ----[2][order:4][level:3]
[3][order:5][level:1]
[6][order:6][level:1]
----[5][order:7][level:2]
.
.
.
记住,这是元素的平面数组,上面只是一个视觉表示。
现在,我尝试将它们放入数组中:
[1][children] => [
[7],
[4][children] => [
[2]
]
]
[3],
[6][children] => [
[5]
]
这将代表一个树结构-ish
我首先按顺序订购:
foreach($elements as $element){
$ordered_elements[$element['order']] = $element;
}
然后我将每个元素移动到正确的父元素下:
foreach($ordered_elements as &$child){
if($child['level'] > 1){
$ordered_elements[$last_parent[$child['level']-1]]['children'][$child['content_id']] = &$child; // I think this is problematic line!!!
}
$last_parent[$child['level']] = $child['sort_order'];
}
有些元素保留在根(第一)级别,但不应该存在:
foreach($ordered_elements as &$child){
if($child['level'] == 1){
$ordered_elements[$child['content_id']] = $child;
}
unset($ordered_elements[$child['sort_order']]);
}
完成后,模板数组就准备好了。现在,我开始从查询中获取一些数据,其中包含元素id和用户id
我想建立一个新的表“users”,它将为每个用户创建一个数组,并且我将能够更改每个用户的元素
users[1]['elements'] = $ordered_elements;
users[2]['elements'] = $ordered_elements;
此函数应通过引用从用户自己的元素池返回元素,因此我们可以直接将其更改为用户[x]['elements'][x]:
function &get_element_from_array(&$array, $searchValue){
$status = false;
foreach($array as $id => &$subtree) {
if ($id === $searchValue) {
return $subtree;
}
if (isset($subtree['children'])) {
$subsearch = &$this->get_element_from_array($subtree['children'], $searchValue);
if ($subsearch != false) {
return $subsearch;
}
}
}
return $status;
}
这意味着如果我想从用户2更改元素5,我需要这样调用它:
$element = &get_element_from_array(users[2]['elements'], 5);
$element['visited'] = true;
这就是问题所在:我刚刚在user2和user1元素数组中更改了这个元素
我希望我没有把这件事写得太长,是为了得到好的解释