2

如何在 PHP 中以树格式返回多维数组键?

例如,如果我有以下数组:

$array = array ( 
    array (
        'name' => 'A', 
        'product' => array (
            'qty' => 1,
            'brand' => 'Tim'
        ), 
        'goods' => array (
            'qty' => 2
        ), 
        'brand' => 'Lin'
    ),
    array (
        'name' => 'B', 
        'product' => array (
            'qty' => 6,
            'brand' => 'Coff'
        ),
        'goods' => array (
            'qty' => 4
        ), 
        'brand' => 'Ji'
    )
);

我怎样才能得到如下结果——包括不重复键:

-name
-product
--qty
--brand
-goods
--qty
--brand
4

3 回答 3

1

递归函数应涵盖您想要/需要的任何深度:

 function print_tree($tree, $level = 0) {
     foreach($tree AS $name => $node) {
         if(
               is_scalar($node) OR
               (
                   is_object($node) AND
                   method_exists($node, '__toString')
               )
           ) {
             echo str_repeat('-', $level).$name.': '.$node;
         }
         else if(
                   is_array($node) OR
                   (
                       is_object($node) AND
                       $node InstanceOf Traversable
                   )
                ) {
             echo str_repeat('-', $level).$name.":\n";
             print_tree($node, $level+1);
         }
     }
 }
于 2012-06-28T11:12:06.070 回答
0

具有无限深度,您需要一个递归函数。我想你有 $names 中的父母和 $children 中的孩子:

function render_select($root=0, $level=-1) 
{
    global $names, $children;
    if ($root != 0)
       echo '<option>' . strrep(' ', $level) . $names[$root] . '</option>';
    foreach ($children[$root] as $child)
       render_select($child, $level+1);
}

这个函数很有用,因为你可以用 2 个变量来喂它。另一个答案需要一个多维数组。

于 2012-06-28T11:11:41.907 回答
0
function print_tree($array, $level=1) {
    foreach($array as $element) {
        if(is_array($element)) {
            print_tree($element, $level+1);
        } else {
            print str_repeat('-', $level).$element."\n";
        }
    }
}
于 2012-06-28T11:12:23.083 回答