繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM