我有一个生成多维的函数来表示树结构。它返回的print_r看起来像这样:
Array (
[A] => Array (
[A1] =>
[A2] =>
)
[B] => Array (
[B1] => Array (
[B1a] =>
)
)
)
我需要的是一个递归函数,它以第一顺序输出,如下所示:
A
A1
A2
B
B1
B1a
或只是
A, A1, A2, B, B1, B1a
我已经尝试解决这个问题几个小时了,所以请帮助我。
答案 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
答案 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