Dariel Pratama
Dariel Pratama

Reputation: 1675

remove empty array from multidimensional array

I have the following array

$cal = array(
    0 => array(
        0 => array(
            0 => '*',
            1 => 2,
            2 => 3,
        ) ,
        1 => array(
            0 => 6,
            1 => 7,
            2 => 8,
            3 => 9,
            4 => 10,
        ) ,
        2 => array(
            0 => '*',
            1 => '*',
            2 => 15,
            3 => '*',
            4 => 17,
        ) ,
        3 => array(
            0 => 20,
            1 => 21,
            2 => 22,
            3 => 23,
            4 => 24,
        ) ,
        4 => array(
            0 => 27,
            1 => 28,
            2 => 29,
            3 => 30,
            4 => 31,
        ) ,
    ) ,
    1 => array(
        0 => array() ,
        1 => array(
            0 => 3,
            1 => 4,
            2 => 5,
            3 => '*',
            4 => 7,
        ) ,
        2 => array(
            0 => 10,
            1 => 11,
            2 => 12,
            3 => 13,
            4 => 14,
        ) ,
        3 => array(
            0 => 17,
            1 => 18,
            2 => 19,
            3 => 20,
            4 => 21,
        ) ,
        4 => array(
            0 => 24,
            1 => 25,
            2 => 26,
            3 => 27,
            4 => 28,
        ) ,
    ) ,
    2 => array(
        0 => array() ,
        1 => array(
            0 => 3,
            1 => 4,
            2 => 5,
            3 => 6,
            4 => '*',
        ) ,
        2 => array(
            0 => 10,
            1 => 11,
            2 => 12,
            3 => 13,
            4 => 14,
        ) ,
        3 => array(
            0 => 17,
            1 => 18,
            2 => 19,
            3 => 20,
            4 => 21,
        ) ,
        4 => array(
            0 => 24,
            1 => 25,
            2 => 26,
            3 => 27,
            4 => 28,
        ) ,
        5 => array(
            0 => 31,
        ) ,
    ) ,
    3 => array(
        0 => array(
            0 => 1,
            1 => 2,
            2 => 3,
            3 => 4,
        ) ,
        1 => array(
            0 => 7,
            1 => 8,
            2 => 9,
            3 => 10,
            4 => 11,
        ) ,
        2 => array(
            0 => 14,
            1 => 15,
            2 => 16,
            3 => 17,
            4 => 18,
        ) ,
        3 => array(
            0 => 21,
            1 => 22,
            2 => 23,
            3 => 24,
            4 => 25,
        ) ,
        4 => array(
            0 => 28,
            1 => 29,
            2 => 30,
        ) ,
    ) ,
    4 => array(
        0 => array(
            0 => 1,
            1 => 2,
        ) ,
        1 => array(
            0 => '*',
            1 => '*',
            2 => '*',
            3 => 8,
            4 => 9,
        ) ,
        2 => array(
            0 => 12,
            1 => 13,
            2 => 14,
            3 => 15,
            4 => 16,
        ) ,
        3 => array(
            0 => 19,
            1 => 20,
            2 => 21,
            3 => 22,
            4 => 23,
        ) ,
        4 => array(
            0 => 26,
            1 => 27,
            2 => 28,
            3 => 29,
            4 => 30,
        ) ,
    ) ,
    5 => array(
        0 => array() ,
        1 => array(
            0 => 3,
            1 => '*',
            2 => 5,
            3 => 6,
        ) ,
        2 => array(
            0 => 9,
            1 => 10,
            2 => 11,
            3 => 12,
            4 => '*',
        ) ,
        3 => array(
            0 => 16,
            1 => 17,
            2 => 18,
            3 => 19,
            4 => 20,
        ) ,
        4 => array(
            0 => 23,
            1 => 24,
            2 => 25,
            3 => 26,
            4 => 27,
        ) ,
        5 => array(
            0 => 30,
        ) ,
    ) ,
    6 => array(
        0 => array(
            0 => 1,
            1 => 2,
            2 => 3,
            3 => 4,
        ) ,
        1 => array(
            0 => 7,
            1 => 8,
            2 => 9,
            3 => 10,
            4 => 11,
        ) ,
        2 => array(
            0 => 14,
            1 => 15,
            2 => 16,
            3 => 17,
            4 => 18,
        ) ,
        3 => array(
            0 => 21,
            1 => 22,
            2 => 23,
            3 => 24,
            4 => 25,
        ) ,
        4 => array(
            0 => 28,
            1 => 29,
            2 => 30,
            3 => 31,
        ) ,
    ) ,
    7 => array(
        0 => array(
            0 => 1,
        ) ,
        1 => array(
            0 => 4,
            1 => 5,
            2 => 6,
            3 => 7,
            4 => 8,
        ) ,
        2 => array(
            0 => 11,
            1 => 12,
            2 => 13,
            3 => 14,
            4 => 15,
        ) ,
        3 => array(
            0 => 18,
            1 => 19,
            2 => 20,
            3 => 21,
            4 => 22,
        ) ,
        4 => array(
            0 => 25,
            1 => 26,
            2 => 27,
            3 => 28,
            4 => 29,
        ) ,
        5 => array() ,
    ) ,
    8 => array(
        0 => array(
            0 => 1,
            1 => 2,
            2 => 3,
            3 => 4,
            4 => 5,
        ) ,
        1 => array(
            0 => 8,
            1 => 9,
            2 => 10,
            3 => 11,
            4 => 12,
        ) ,
        2 => array(
            0 => 15,
            1 => 16,
            2 => 17,
            3 => 18,
            4 => 19,
        ) ,
        3 => array(
            0 => 22,
            1 => 23,
            2 => 24,
            3 => 25,
            4 => 26,
        ) ,
        4 => array(
            0 => 29,
            1 => 30,
        ) ,
    ) ,
    9 => array(
        0 => array(
            0 => 1,
            1 => 2,
            2 => 3,
        ) ,
        1 => array(
            0 => '*',
            1 => '*',
            2 => '*',
            3 => '*',
            4 => '*',
        ) ,
        2 => array(
            0 => '*',
            1 => '*',
            2 => '*',
            3 => '*',
            4 => '*',
        ) ,
        3 => array(
            0 => 20,
            1 => 21,
            2 => 22,
            3 => 23,
            4 => 24,
        ) ,
        4 => array(
            0 => 27,
            1 => 28,
            2 => 29,
            3 => 30,
            4 => 31,
        ) ,
    ) ,
    10 => array(
        0 => array() ,
        1 => array(
            0 => 3,
            1 => '*',
            2 => 5,
            3 => 6,
            4 => 7,
        ) ,
        2 => array(
            0 => 10,
            1 => 11,
            2 => 12,
            3 => 13,
            4 => 14,
        ) ,
        3 => array(
            0 => 17,
            1 => 18,
            2 => 19,
            3 => 20,
            4 => 21,
        ) ,
        4 => array(
            0 => 24,
            1 => 25,
            2 => 26,
            3 => '*',
            4 => 28,
        ) ,
        5 => array() ,
    ) ,
    11 => array(
        0 => array(
            0 => '*',
            1 => 2,
            2 => 3,
            3 => 4,
            4 => '*',
        ) ,
        1 => array(
            0 => 8,
            1 => 9,
            2 => 10,
            3 => 11,
            4 => 12,
        ) ,
        2 => array(
            0 => 15,
            1 => 16,
            2 => 17,
            3 => 18,
            4 => 19,
        ) ,
        3 => array(
            0 => 22,
            1 => 23,
            2 => 24,
            3 => 25,
            4 => 26,
        ) ,
        4 => array(
            0 => 29,
            1 => 30,
            2 => 31,
        ) ,
    ) ,
)

I'm trying to remove empty array from its parent using the following code:

for($m = 0; $m < count($cal); $m++){
    for($w = 0; $w < count($cal[$m]); $w++){
        if(empty($cal[$m][$w])){
            array_shift($cal[$m]);
        }
    }
}

the result is (please see index 10)

10 => array(
        0 => array(
            0 => 10,
            1 => 11,
            2 => 12,
            3 => 13,
            4 => 14,
        ) ,
        1 => array(
            0 => 17,
            1 => 18,
            2 => 19,
            3 => 20,
            4 => 21,
        ) ,
        2 => array(
            0 => 24,
            1 => 25,
            2 => 26,
            3 => '*',
            4 => 28,
        ) ,
        3 => array() ,
    ) ,

what i expect is remove the first and the last, it is instead remove first and second array and leave the last array still there. any idea?

Upvotes: 2

Views: 2117

Answers (4)

user1187347
user1187347

Reputation: 328

Use unset($cal[$m][$w]) instead of array_shift($cal[$m]).

This will result in

10 => array(
    1 => array(
        0 => 3,
        1 => '*',
        2 => 5,
        3 => 6,
        4 => 7,
    ) ,
    2 => array(
        0 => 10,
        1 => 11,
        2 => 12,
        3 => 13,
        4 => 14,
    ) ,
    3 => array(
        0 => 17,
        1 => 18,
        2 => 19,
        3 => 20,
        4 => 21,
    ) ,
    4 => array(
        0 => 24,
        1 => 25,
        2 => 26,
        3 => '*',
        4 => 28,
    ) ,
) ,

Notice the key [0] is no longer present

Upvotes: 0

Ashique C M
Ashique C M

Reputation: 683

try this code:

foreach ($cal as &$arr)
{
  $arr = array_filter($arr); 
}

$cal = array_filter($cal); 

Upvotes: 0

Fluffeh
Fluffeh

Reputation: 33512

You can use a simple recursive function to traverse each like this:

<?php

    function removeEmpties(&$array)
    {
        foreach($array as $key=>$val)
        {
            if(count($val)==0)
            {
                unset($array[$key]);
            }
            else
            {
                removeEmpties($val);
            }
        }
    }

    $yourArray=array( ... etc );
    removeEmpties($yourArray);

?>

Upvotes: 0

Kevin
Kevin

Reputation: 41885

Try to use array_filter() instead since array_shift() just takes care of the first element:

foreach ($cal as &$value) {
    $value = array_filter($value);
}

Upvotes: 2

Related Questions