PHP: remove element from multidimensional array (by key) using foreach

耗尽温柔 提交于 2019-11-30 20:32:06
Pouya Darabi

easy way!? you can do this just with one foreach!

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

you are making changes in subarray instead of main one try this may help

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

It does not work because $subArr from the outer foreach contains copies of the values of $data and the inner foreach modifies these copies, leaving $data not touched.

You can fix that by telling PHP to make $subArr references to the original values stored in $data:

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

Another option is to use function array_map(). It uses a callback function that can inspect (and modify) each value of $data and it returns a new array.

$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);

try this:

<?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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!