首页 > 解决方案 > PHP - 将树数组展平为分层 CSV

问题描述

我有一个部门的树形结构数组,我需要将其展平为 CSV(显示每个端部门的完整路径)

假设我有以下数组:

$arr = array("AA" => ["BB" => [], "CC" => ["DD" => [], "EE" => []]], "FF" => ["GG" =>[]]);

var_dump:

array(2) {
  ["AA"]=>
  array(2) {
    ["BB"]=>
    array(0) {
    }
    ["CC"]=>
    array(2) {
      ["DD"]=>
      array(0) {
      }
      ["EE"]=>
      array(0) {
      }
    }
  }
  ["FF"]=>
  array(1) {
    ["GG"]=>
    array(0) {
    }
  }
}

我需要将它们展平成这样的 CSV 结构

AA
AA | BB
AA | CC
AA | CC | DD
AA | CC | EE
FF
FF | GG

我已经尝试过递归函数,但我总是得到不能作为 CSV 工作的子数组

标签: phparrayscsv

解决方案


编写递归函数应该很简单:

function rec($arr, $pre) {
    foreach($arr as $k => $v) {
        $t = array_merge($pre, [$k]);
        echo implode (" | ", $t) . PHP_EOL;
        rec($v, $t);
    }
}

简单示例如下:

$arr = array("AA" => ["BB" => [], "CC" => []], "DD" => []);
rec($arr, []);

输出:

AA
AA | BB
AA | CC
DD

推荐阅读