打印数组,子阵列等

时间:2014-12-11 13:05:50

标签: php arrays recursion

我有一个多维array,其中包含一堆类别。在这个例子中,我填写了服装类别。

$categories = array(
    'Fashion' => array(
        'Shirts' => array(
            'Sleeve' => array(
                'Short sleeve',
                'Long sleeve'
            ),
            'Fit' => array(
                'Slim fit',
                'Regular fit'
            ),
            'Blouse'
        ),
        'Jeans' => array(
            'Super skinny',
            'Slim',
            'Straight cut',
            'Loose',
            'Boot cut / flare'
        )
    ),
);

我希望能够像这样打印整个array

--Fashion
----Shirts
-------Sleeve
---------Short sleeve
---------Long sleeve
-------Fit
---------Slim fit
---------Regular fit
----Blouse

我想我需要使用某种递归函数。

我该怎么做?

3 个答案:

答案 0 :(得分:6)

我试图使用你给定的数组并得到这个:

$categories = array(
    'Fashion' => array(
        'Shirts' => array(
            'Sleeve' => array(
                'Short sleeve',
                'Long sleeve'
            ),
            'Fit' => array(
                'Slim fit',
                'Regular fit'
            ),
            'Blouse'
        ),
        'Jeans' => array(
            'Super skinny',
            'Slim',
            'Straight cut',
            'Loose',
            'Boot cut / flare'
        )
    ),
);

showCategories($categories);

function showCategories($cats,$depth=1) { // change depth to 0 to remove the first two -

    if(!is_array($cats))
        return false;

    foreach($cats as$key=>$val) {

        echo str_repeat("-",$depth*2).(is_string($key)?$key:$val).'<br>'; // updated this line so no warning or notice will get fired

        if(is_array($val)) {
            $depth++;
            showCategories($val,$depth);
            $depth--;
        }

    }

}

将导致

--Fashion
----Shirts
------Sleeve
--------Short sleeve
--------Long sleeve
------Fit
--------Slim fit
--------Regular fit
------Blouse
----Jeans
------Super skinny
------Slim
------Straight cut
------Loose
------Boot cut / flare

答案 1 :(得分:1)

递归函数将为您提供答案:

function printAll($a) {
    if (!is_array($a)) {
        echo $a, ' ';
        return;
    }

    foreach($a as $k => $value) {
             printAll($k);
             printAll($value);

    }
}

答案 2 :(得分:0)

试试这个

<?php 
function print_r_recursive($array){
    if(!is_array($array)){
        echo $array;
        return; }
    foreach ($array as  $value) {
        if(is_array($value)){
            print_r_recursive($value);
        }
    }
}
 ?>