1

我有一个生成多维来表示树结构的函数。它返回的 print_r 看起来像这样:

Array (
    [A] => Array (
        [A1] =>
        [A2] =>
    )
    [B] => Array (
        [B1] => Array (
            [B1a] =>
        )
    )
)

我需要的是一个递归函数,它以深度一阶输出,如下所示:

A
  A1
  A2
B
  B1
    B1a

要不就

A, A1, A2, B, B1, B1a

我已经尝试解决这个问题几个小时了,所以请帮助我。

4

3 回答 3

1

使用递归函数,例如:

<?php
$arr = array(
    'A'=>array(
        "A1"=>1,
        "A2"=>1,
        ),
        "B"=>array(
            "B1"=>array(
                "B2a"=>1,
                )
            ),
    );

function print_key($arr, $depth = 0){
    $pre_str = str_repeat("\t", $depth);
    foreach($arr as $k=>$v){
        echo $pre_str.$k."\n";
        if(is_array($v))
            print_key($v, $depth+1);
    }
}
print_key($arr);
于 2013-08-27T05:49:16.157 回答
1

您不需要递归扫描数组,因为print_r已经为您完成了。您可以调用print_r然后解析输出:

preg_match_all('/^[^\[]*\[([^\]]*)\][^\]]*$/m', print_r($arr, true), $matches);
$result = implode(', ', $matches[1]);

echo $result; // A, A1, A2, B, B1, B1a

演示

于 2013-08-26T22:27:16.517 回答
0

我意识到我可以尝试模仿 print_r 函数,所以我在这里找到了一个可用的函数: php print_r nice table

于 2013-08-26T22:16:28.373 回答