【问题标题】:How to remove empty subarrays in a variable-depth multi-dimensional array?如何删除可变深度多维数组中的空子数组?
【发布时间】:2018-02-12 04:56:45
【问题描述】:

我有一个数组,但我不知道如何删除所有空的 'subs' 子数组。

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

【问题讨论】:

  • 第一个问题:你将如何迭代这个?像这样的结构似乎会转向递归方法。
  • 你能展示你构建这个数组的代码吗?您只需在添加之前检查它的 !empty 即可。
  • @BrianGottier 该链接正在删除同一级别的空元素(子数组具有可预测的深度)。 Ngan 的多维数组有不同的底层。
  • 你试过取消设置吗?未设置(arr['key']);

标签: php recursion multidimensional-array is-empty


【解决方案1】:

递归是必要的,因为您的底层子数组具有可变深度。

代码:(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));

输出:

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

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2014-02-13
    • 2016-01-14
    相关资源
    最近更新 更多