2

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?

4
  • array_shift removes a element from the beginning of the array Commented Nov 12, 2014 at 8:59
  • array_shift removes (and returns) always the first element of the given array. Why don't you use unset instead? Commented Nov 12, 2014 at 9:00
  • oh yes i forget about that, instead of using array_shift i should remove the array by its index, am i right? Commented Nov 12, 2014 at 9:00
  • $cal = array_map('array_filter', $cal); will also do the same job Commented Feb 15, 2018 at 4:37

4 Answers 4

2

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

foreach ($cal as &$value) {
    $value = array_filter($value);
}
Sign up to request clarification or add additional context in comments.

1 Comment

@DarielPratama just add $value = array_values($value); to reset their respective indices
0

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

?>

Comments

0

try this code:

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

$cal = array_filter($cal); 

Comments

0

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

1 Comment

add the line $cal[$m] = array_values($cal[$m]) after the second for loop

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.