PHP:使用 foreach 从多维数组中删除元素(按键)
Posted
技术标签:
【中文标题】PHP:使用 foreach 从多维数组中删除元素(按键)【英文标题】:PHP: remove element from multidimensional array (by key) using foreach 【发布时间】:2015-02-13 11:29:08 【问题描述】:我得到了多维数组。从每个子数组中,我想删除/取消设置索引为 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 复制了元素并且不适用于原始数组,您可以通过引用分配来避免这种情况。为了能够直接修改循环中的数组元素,在 $subArr 之前使用 &。在这种情况下,该值将通过引用分配。 【参考方案1】:试试这个:
<?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
【讨论】:
【参考方案2】:您正在更改子数组而不是主数组尝试这可能会有所帮助
foreach ($data as $key => $subArr)
unset($data[$key][1]);
【讨论】:
为我工作!!谢谢。【参考方案3】:简单的方法!? 只需一个 foreach 就可以做到这一点!
foreach ($data as $key => $subArr)
unset($subArr['1']);
$data[$key] = $subArr;
【讨论】:
【参考方案4】:它不起作用,因为外部foreach
中的$subArr
包含$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:使用 foreach 从多维数组中删除元素(按键)的主要内容,如果未能解决你的问题,请参考以下文章