是否可以通过指针删除数组元素?
多维数组:
$list = array(
1=>array(
2=>array('entry 1'),
3=>array('entry 2')
),
4=>'entry 3',
5=>array(
6=>array('entry 4')
)
);
参考数组:
$refs = array(
1=>&$list[1],
2=>&$list[1][2],
3=>&$list[1][3],
4=>&$list[4],
5=>&$list[5],
6=>&$list[5][6]
);
引用数组仅包含多维数组元素的指针(别名)。现在我想删除(取消链接)$ list数组中的元素。
使用,
$n=3;
unset($refs[$n])
但PHP只删除指针。
答案 0 :(得分:4)
你的参考数组似乎错了:
$refs = array(
1 => &$list[1],
2 => &$list[2],
3 => &$list[3],
4 => &$list[4],
5 => &$list[5],
6 => &$list[6]
);
但您的$list
数组不包含元素2
,3
和6
。所以$refs
数组应该看起来像:
$refs = array(
1 => &$list[1],
2 => &$list[1][2],
3 => &$list[1][3],
4 => &$list[4],
5 => &$list[5],
6 => &$list[5][6]
);
根据您的要求,您可以做:
$refs[2] = null;
unset($refs[2]);
但是这会将$list[1][2]
作为包含NULL
的数组元素。
修改强>
要从它的源数组$list
中删除元素,你必须使用一些递归搜索功能(未经测试 - 可能需要一些调整):
function removeElement($element, array &$array)
{
foreach ($array as $key => &$value) {
if ($element == $value) {
unset($array[$key]);
return true;
} else if (is_array($value)) {
$found = removeElement($element, $value);
if ($found) {
return true;
}
}
}
return false;
}
removeElement($refs[2], $list);
答案 1 :(得分:0)
是否可以存储对“parent”元素和索引的引用,如
<?php
$list = array(
1=>array(
2=>array('entry 1'),
3=>array(
4=>'entry 2',
5=>'entry 3'
)
),
2=>'entry 3',
5=>array(
'foo'=>'entry 4',
1=>'entry 99'
)
);
// delete
$refs = array(
// 'entry 2'
array(&$list[1][3], 4),
// and 'entry 4'
array(&$list[5], 'foo')
);
foreach($refs as $r) {
unset($r[0][$r[1]]);
}
print_r($list);