-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()
                        )
                )
        )
)
Joshua
  • 40,822
  • 8
  • 72
  • 132
Ngan
  • 15
  • 3
  • 1
    First question: How would you iterate over this? A structure like this seems to steer towards a recursive method. – tadman Sep 04 '17 at 00:02
  • Can you show the code where you build this array? You simply need to check its !empty before adding it. – Lawrence Cherone Sep 04 '17 at 00:03
  • 1
    https://stackoverflow.com/questions/9895130/php-remove-empty-array-elements-from-a-multidimensional-array – Brian Gottier Sep 04 '17 at 00: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. – mickmackusa Sep 04 '17 at 00:28
  • have you tried unset? unset(arr['key']); – winnie damayo Sep 04 '17 at 02:32
  • Possible duplicate of [PHP: Remove empty array elements from a multidimensional array](https://stackoverflow.com/questions/9895130/php-remove-empty-array-elements-from-a-multidimensional-array) – localheinz Sep 04 '17 at 05:09

1 Answers1

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,
      ),
    ),
  ),
)
mickmackusa
  • 43,625
  • 12
  • 83
  • 136