Array
(
[15, BBC company] => Array
(
[147, IT Dep] => 85
[150, HR Dep] => Array
(
[58] => employee 1
[71] => employee 2
)
)
)
我想删除 [58] =>来自数组的员工1 以下是我的代码,但它不起作用。
任何人都可以帮助我吗?非常感谢!
foreach($arr as $key=>$value){
foreach ($value as $subKey=>$subVal){
foreach($subVal as $k=>$v){
if($k==58){
echo $k;
unset($subVal[$k]);
}
}
}
}
预期结果
Array
(
[15, BBC company] => Array
(
[147, IT Dep] => 85
[150, HR Dep] => Array
(
[71] => employee 2
)
)
)
答案 0 :(得分:1)
Delete an element from an array
unset($myArray[15][150][58]);
where 15 = BBC Company
150 = HR Dept
58 = some employee you want fired
在你到达第三个维度之前,你已经知道要去哪里了。你只需要填写它。
另外,你现在正在做的是你在数组的第三维中取消了每个第58个索引值 - 顺便说一下这是错误的。假设您的员工碰巧在IT部门数组中有索引58。您也可以使用当前代码删除他。
答案 1 :(得分:1)
代码必须如下:
foreach($arr as $key=>&$value){
foreach ($value as $subKey=>&$subVal){
foreach($subVal as $k=>&$v){
if($k==58){
echo $k;
unset($subVal[$k]);
}
}
}
}
因为foreach
创建了数组的副本,并且您正在取消设置此副本的元素。在上面的代码中,数组作为引用传递
答案 2 :(得分:1)
foreach循环提供的变量是按值而不是引用,因此您无法修改原始变量,并且强制在foreach中使用&
强制使用引用。你最好直接使用foreach提供的键而不是它提供的变量。
foreach($arr as $key=>$value){
foreach ($arr[$key] as $subKey=>$subVal){
foreach($arr[$key][$subKey] as $k=>$v){
if($k==58){
echo $k;
unset($arr[$key][$subKey][$k]);
}
}
}
}
完全未经测试。
答案 3 :(得分:1)
$arr = Array(
'15, BBC company' => Array(
'147, IT Dep' => 85,
'150, HR Dep' => Array(
'58' => 'employee 1',
'71' => 'employee 2'
)
)
);
foreach($arr as $key=>$value){
foreach ($value as $subKey=>$subVal){
if(is_array($subVal)):
foreach($subVal as $k=>$v) {
if($k==58){
echo $k;
echo '<br />';
print_r($value[$subKey][$k]);
echo '<br />';
unset($arr[$key][$subKey][$k]);
}
}
endif;
}
}
print_r($arr);