[英]PHP: remove element from multidimensional array (by key) using foreach
我得到了多维数组。 从每个子数组,我想删除/取消设置索引1的值。我的数组$ data。
Array
(
[3463] => Array
(
[0] => 1
[1] => 2014
[context] => 'aaa'
)
[3563] => Array
(
[0] => 12
[1] => 2014
[context] => 'aaa'
)
[2421] => Array
(
[0] => 5
[1] => 2014
[context] => 'zzz'
)
)
我想从子数组中删除索引为'1'的每个元素。 期望的输出是:
Array
(
[3463] => Array
(
[0] => 1
[context] => 'aaa'
)
[3563] => Array
(
[0] => 12
[context] => 'aaa'
)
[2421] => Array
(
[0] => 5
[context] => 'zzz'
)
)
为什么这不起作用?
foreach ($data as $subArr) {
foreach ($subArr as $key => $value) {
if ($key == '1') {
unset($subArr[$key]);
}
}
}
我很抱歉,如果这个问题对你们来说是微不足道的话。
简单的方法!? 你可以用一个foreach做到这一点!
foreach ($data as $key => $subArr) {
unset($subArr['1']);
$data[$key] = $subArr;
}
这是行不通的,因为$subArr
从外foreach
包含的值的副本 $data
和内部foreach
修改这些副本,留下$data
未触及。
你可以解决这个问题,告诉PHP
使$subArr
引用存储在原始值$data
:
foreach ($data as &$subArr) {
foreach ($subArr as $key => $value) {
if ($key == '1') {
unset($subArr[$key]);
}
}
}
另一个选择是使用函数array_map()
。 它使用一个回调函数,可以检查(和修改) $data
每个值,并返回一个新数组。
$clean = array_map(
function (array $elem) {
unset($elem['1']); // modify $elem
return $elem; // and return it to be put into the result
},
$data
);
print_r($clean);
尝试这个:
<?php
$data = Array
(
'3463' => Array
(
'0' => 1,
'1' => 2014,
'context' => 'aaa'
),
'3563' => Array
(
'0' => 12,
'1' => 2014,
'context' => 'aaa'
),
'2421' => Array
(
'0' => 5,
'1' => 2014,
'context' => 'zzz'
)
);
foreach ($data as $k=>$subArr) {
foreach ($subArr as $key => $value) {
if ($key == '1') {
unset($data[$k][$key]);
}
}
}
print_r($data);// display the output
你正在改变子阵列而不是主要的尝试这可能有所帮助
foreach ($data as $key => $subArr) {
unset($data[$key][1]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.