【问题标题】:PHP Nested Array convert into flat arrayPHP嵌套数组转换为平面数组
【发布时间】:2017-10-11 15:25:45
【问题描述】:

我无法像这样转换我的分层数组:

array(
[0]=>
  array(3) {
    ["id"]=>
    int(2353011010)
    ["name"]=>
    string(17) "LEDER ACCESSOIRES"
    ["order"]=>
    int(15)
  }
[1]=>
  array(3) {
    ["id"]=>
    int(2371475010)
    ["name"]=>
    string(15) "SPORT AUFKLEBER"
    ["order"]=>
    int(25)
  }
[2]=>
  array(4) {
    ["id"]=>
    int(2563635010)
    ["name"]=>
    string(17) "KENNZEICHENHALTER"
    ["order"]=>
    int(10)
    ["children"]=>
    array(6) {
      [0]=>
      array(4) {
        ["id"]=>
        int(3854259010)
        ["name"]=>
        string(9) "EDELSTAHL"
        ["order"]=>
        int(92)
        ["children"]=>
        array(2) {
          [0]=>
          array(3) {
            ["id"]=>
            int(20878056010)
            ["name"]=>
            string(5) "test1"
            ["order"]=>
            int(1)
          }
        }
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(3854260010)
        ["name"]=>
        string(5) "CHROM"
        ["order"]=>
        int(91)
      }
    }
[3]=>
  array(4) {
    ["id"]=>
    int(19754330010)
    ["name"]=>
    string(30) "SCHALTMANSCHETTEN CARBON OPTIK"
    ["order"]=>
    int(3)
    }
}
)

变成这样的扁平的:

array(
[0]=>
    array(3) {
        ["id"]=>
        int(2353011010)
        ["name"]=>
        string(17) "LEDER ACCESSOIRES"
        ["order"]=>
        int(15)
    }
[1]=>
    array(3) {
        ["id"]=>
        int(2371475010)
        ["name"]=>
        string(15) "SPORT AUFKLEBER"
        ["order"]=>
        int(25)
    }
[2]=>
    array(3) {
        ["id"]=>
        int(2563635010)
        ["name"]=>
        string(17) "KENNZEICHENHALTER"
        ["order"]=>
        int(10)
    }
[3]=>
    array(4) {
        ["id"]=>
        int(3854259010)
        ["name"]=>
        string(9) "EDELSTAHL"
        ["order"]=>
        int(92),
        ["parentId"]=> 2563635010
    }
[4]=>
    array(4) {
        ["id"]=>
        int(20878056010)
        ["name"]=>
        string(5) "test1"
        ["order"]=>
        int(1),
        ["parentId"]=> 2563635010
    }
[5]=>
    array(4) {
        ["id"]=>
        int(3854260010)
        ["name"]=>
        string(5) "CHROM"
        ["order"]=>
        int(91),
        ["parentId"]=> 2563635010
    }
[6]=>
  array(4) {
    ["id"]=>
    int(19754330010)
    ["name"]=>
    string(30) "SCHALTMANSCHETTEN CARBON OPTIK"
    ["order"]=>
    int(3)
}
)

应删除子实体,并且每个子元素都应获得更高级别 id 的 parentId 实体。我需要这个解决方案来转移到数据库中。

谢谢

【问题讨论】:

  • 你能分享你输入数组的 JSON 吗?
  • 你可以检查这个:stackoverflow.com/questions/6785355/…你会在那里找到你的答案
  • @SahilGulati 原始数组太长,但这里有一部分编码为 JSON:{"id":2371475010,"name":"SPORT AUFKLEBER","order":25},{" id":2563635010,"name":"KENNZEICHENHALTER","order":10,"children":[{"id":3854259010,"name":"EDELSTAHL","order":92,"children":[ {"id":20878056010,"name":"test1","order":1},{"id":20878057010,"name":"test2","order":2}]},{"id" :3854260010,"name":"CHROM","order":91},{"id":3854261010,"name":"CARBON","order":90},
  • @Smalldeveloper:是的,我尝试过一些类似的解决方案,但每个结果都与我的结果结构不同
  • 你应该看看这篇文章:stackoverflow.com/questions/1319903/…

标签: php multidimensional-array flatten


【解决方案1】:

现在,我创建了一个适合我的“临时”方法,但使用起来非常灵活:

function recursive($categories) {

    foreach ($categories as $value) {
        $result[$value->id]['id'] = $value->id;
        $result[$value->id]['name'] = $value->name;
        $result[$value->id]['order'] = $value->order;
        $result[$value->id]['parentId'] = 0;

        if(isset($value->children)) {
            $parentId = $value->id;

            foreach($value->children as $value2) {
                $result[$value2->id]['id'] = $value2->id;
                $result[$value2->id]['name'] = $value2->name;
                $result[$value2->id]['parentId'] = $parentId;

                if(isset($value2->children)) {
                    $parentId = $value2->id;

                    foreach($value2->children as $value3) {
                        $result[$value3->id]['id'] = $value3->id;
                        $result[$value3->id]['name'] = $value3->name;
                        $result[$value3->id]['parentId'] = $parentId;
                    }
                }
            }
        }
    }

    return $result;
}

有人知道这种方法的递归解决方案吗?

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2020-01-15
    • 2015-07-19
    相关资源
    最近更新 更多