PHP:使用foreach从多维数组中删除元素(按键)

PHP:使用foreach从多维数组中删除元素(按键),php,arrays,multidimensional-array,foreach,unset,Php,Arrays,Multidimensional Array,Foreach,Unset,我得到了多维数组。从每个子数组中,我想删除/取消设置索引为1的值。我的数组是$data Array ( [3463] => Array ( [0] => 1 [1] => 2014 [context] => 'aaa' ) [3563] => Array ( [0] => 12

我得到了多维数组。从每个子数组中,我想删除/取消设置索引为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]);
       }

   }
}
如果这个问题对你们来说微不足道,我很抱歉。

试试这个:

<?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]);      
}
简单的方法!? 你只需要一个foreach就可以做到这一点

foreach ($data as $key => $subArr) {
    unset($subArr['1']);
    $data[$key] = $subArr;  
}

它不起作用,因为外部
foreach
$subar
包含
$data
值的副本,而内部
foreach
修改这些副本,使
$data
不被触碰

您可以通过告诉
PHP
对存储在
$data
中的原始值进行
$subar
引用来修复此问题:

foreach ($data as &$subArr) {
   foreach ($subArr as $key => $value) {
       if ($key == '1') {
        unset($subArr[$key]);
       }
   }
}
另一个选择是使用函数。它使用一个回调函数,可以检查(和修改)
$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);

这是因为foreach复制了元素,而不在原始数组上工作,所以可以通过引用赋值来避免这种情况。为了能够直接修改循环中的数组元素,请在$subar之前加上&。在这种情况下,该值将通过引用进行赋值。太漂亮了。非常感谢。我会在7分钟内接受你的答案。我已经接受了来自“Pouya Darabi”的答案,它比较短。无论如何,谢谢你的快速帮助!