仅输出嵌套数组的键作为字符串。

时间:2013-08-26 22:03:25

标签: php arrays recursion

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

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

我需要的是一个递归函数,它以第一顺序输出,如下所示:

A
  A1
  A2
B
  B1
    B1a

或只是

A, A1, A2, B, B1, B1a

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

3 个答案:

答案 0 :(得分: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

Demo

答案 1 :(得分: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);

答案 2 :(得分:0)

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