-1

I have an array, but I don't know how to remove all of the empty 'subs' subarrays.

Array
(
    [3] => Array
        (
            [sponsorid] => 2
            [user_id] => 3
            [subs] => Array
                (
                    [4] => Array
                        (
                            [sponsorid] => 3
                            [user_id] => 4
                            [subs] => Array
                                (
                                    [5] => Array
                                        (
                                            [sponsorid] => 4
                                            [user_id] => 5
                                            [subs] => Array
                                                (
                                                    [6] => Array
                                                        (
                                                            [sponsorid] => 5
                                                            [user_id] => 6
                                                            [subs] => Array()
                                                        )
                                                    [9] => Array
                                                        (
                                                            [sponsorid] => 5
                                                            [user_id] => 9
                                                            [subs] => Array()

                                                        )
                                                    [10] => Array
                                                        (
                                                            [sponsorid] => 5
                                                            [user_id] => 10
                                                            [subs] => Array()

                                                        )
                                                )
                                        )
                                    [12] => Array
                                        (
                                            [sponsorid] => 4
                                            [user_id] => 12
                                            [subs] => Array()
                                        )
                                )
                        )
                    [11] => Array
                        (
                            [sponsorid] => 3
                            [user_id] => 11
                            [subs] => Array()
                        )
                )
        )
)
6
  • 1
    First question: How would you iterate over this? A structure like this seems to steer towards a recursive method. Commented Sep 4, 2017 at 0:02
  • Can you show the code where you build this array? You simply need to check its !empty before adding it. Commented Sep 4, 2017 at 0:03
  • 1
    stackoverflow.com/questions/9895130/… Commented Sep 4, 2017 at 0:07
  • @BrianGottier That link is removing empty elements on the same level (subarrays have predictable depth). Ngan's multi-dim array has differing bottom levels. Commented Sep 4, 2017 at 0:28
  • have you tried unset? unset(arr['key']); Commented Sep 4, 2017 at 2:32

1 Answer 1

0

Recursion is necessary as your bottom level subarrays have variable depth.

Code: (Demo)

function removeEmptySubs($array){
    foreach ($array as &$a){  // make $a modifiable by reference
        if(!sizeof($a['subs'])){  // check if 'subs' array is empty
            unset($a['subs']);    // remove it
        }else{
            $a['subs']=removeEmptySubs($a['subs']); // recurse
        }
    }
    return $array;
}

$array=[
    3 => [
            'sponsorid' => 2,
            'user_id' => 3,
            'subs' => [
                    4 => [
                            'sponsorid' => 3,
                            'user_id' => 4,
                            'subs' => [
                                    5 => [
                                            'sponsorid' => 4,
                                            'user_id' => 5,
                                            'subs' => [
                                                    6 => [
                                                            'sponsorid' => 5,
                                                            'user_id' => 6,
                                                            'subs' => [
                                                                ]
                                                        ],
                                                    9 => [
                                                            'sponsorid' => 5,
                                                            'user_id' => 9,
                                                            'subs' => [
                                                                ]
                                                        ],
                                                    10 => [
                                                            'sponsorid' => 5,
                                                            'user_id' => 10,
                                                            'subs' => [
                                                                ]
                                                        ]
                                                ]
                                        ],
                                    12 => [
                                            'sponsorid' => 4,
                                            'user_id' => 12,
                                            'subs' => [
                                                ]
                                        ]
                                ]
                        ],
                    11 => [
                            'sponsorid' => 3,
                            'user_id' => 11,
                            'subs' => [
                                ]
                        ]
                ]
        ]
];
var_export(removeEmptySubs($array));

Output:

array (
  3 => 
  array (
    'sponsorid' => 2,
    'user_id' => 3,
    'subs' => 
    array (
      4 => 
      array (
        'sponsorid' => 3,
        'user_id' => 4,
        'subs' => 
        array (
          5 => 
          array (
            'sponsorid' => 4,
            'user_id' => 5,
            'subs' => 
            array (
              6 => 
              array (
                'sponsorid' => 5,
                'user_id' => 6,
              ),
              9 => 
              array (
                'sponsorid' => 5,
                'user_id' => 9,
              ),
              10 => 
              array (
                'sponsorid' => 5,
                'user_id' => 10,
              ),
            ),
          ),
          12 => 
          array (
            'sponsorid' => 4,
            'user_id' => 12,
          ),
        ),
      ),
      11 => 
      array (
        'sponsorid' => 3,
        'user_id' => 11,
      ),
    ),
  ),
)
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.