I got multidimensional array. From each subarray, I would like to remove / unset values with index 1. My array $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'
        )               
)
I would like to remove every element with index '1' from subarrays. Desired output is:
Array
(
    [3463] => Array
        (
            [0] => 1
            [context] => 'aaa'
        )
    [3563] => Array
        (
            [0] => 12
            [context] => 'aaa'
        )       
    [2421] => Array
        (
            [0] => 5
            [context] => 'zzz'
        )               
)
Why this does not work?
foreach ($data as $subArr) {
   foreach ($subArr as $key => $value) {
       if ($key == '1') {
        unset($subArr[$key]);
       }
   }
}
I'm sorry if this problem is trivial for you guys.
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);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With