PHP 删除无用的嵌套数组

PHP remove useless nested array

我正在使用生成以下数组的 jQuery 插件:

    array:4 [
  0 => array:1 [
    "page_id" => "1"
  ]
  1 => array:2 [
    "page_id" => "2"
    "children" => array:1 [
      0 => array:2 [
        0 => array:2 [
          "page_id" => "10"
          "children" => array:1 [
            0 => array:2 [
              0 => array:1 [
                "page_id" => "12"
              ]
              1 => array:1 [
                "page_id" => "13"
              ]
            ]
          ]
        ]
        1 => array:1 [
          "page_id" => "11"
        ]
      ]
    ]
  ]
  2 => array:1 [
    "page_id" => "4"
  ]
  3 => array:1 [
    "page_id" => "3"
  ]
]

这个数组是动态的,所以可以有更多的嵌套数组。我需要稍微清理一下阵列。如您所见,在 page_id => 2 下有 children。它包含一个无用的数组 (0 => array: 2).

是否可以删除这些无用的数组?我真的需要它来重新生成我的菜单项位置...有什么想法吗?

您可以使用递归算法:

function removeUselessArrays($array) {
    $newArray = [];

    foreach ($array as $key => $value) {
        if (is_array($value)) {
            if (array_keys($value) === [ 0 ]) {
                $newArray[$key] = removeUselessArrays($value[0]);
            } else {
                $newArray[$key] = removeUselessArrays($value);
            }
        } else {
            $newArray[$key] = $value;
        }
    }

    return $newArray;
}

查看有效代码 here

您可以像这样在循环中执行此操作:

ALGORITHM:

<?php

    foreach($arr as $key=>$val){
        foreach($val as $index=>$item){
            if( is_array($item) ){
                $children               = ["page_id"=>$item[0]["page_id"]];
                $children               = array_merge($children, $item[0][$index]);
                $arr[$key][$index]      = $children;
            }
        }
    }

测试

    <?php

    // LOOP THROUGH THE ARRAY CONTAINING UNWANTED ELEMENT(S)
    foreach($arr as $key=>$val){
        foreach($val as $index=>$item){
            // CHECK IF ONE OF THE SUB-ELEMENTS IS AN ARRAY & HAS KEY: children
            if( is_array($item) ){
                // IF SO; GET THE CHILDREN ELEMENT OFF THAT ITEM
                // AND STORE IT IN A VARIABLE...
                $children               = $item[0][$index];
                // NOW SET THE SUB-ELEMENT TO THE $children
                $children               = ["page_id"=>$item[0]["page_id"]];
                $children               = array_merge($children, $item[0][$index]);
                $arr[$key][$index]      = $children;
            }
        }
    }

    // DUMP-OUT THE OUTPUT:
    var_dump($arr);

    // PRODUCES:::  
    array (size=4)
      0 =>
        array (size=1)
          'page_id' => string '1' (length=1)
      1 =>
        array (size=2)
          'page_id' => string '2' (length=1)
          'children' =>
             array (size=3)
              'page_id' => string '10' (length=1)
               0 =>
                array (size=1)
                  'page_id' => string '12' (length=1)
               1 =>
                array (size=1)
                  'page_id' => string '13' (length=1)
      2 =>
        array (size=1)
          'page_id' => string '4' (length=1)
      3 =>
        array (size=1)
          'page_id' => string '3' (length=1)

找到快速测试 Here