更动态的方式输出多维数组PHP


More dynamic way of outputting Multi-Dimensional Arrays PHP

所以,我还在学习PHP,我想自定义数组的结构,所以他们不是静态的。但我遇到了一个问题。我已经设法写出每个数组里面有一个数组,但现在我很难找到一种方法来写出那些里面没有数组的数组,而不是得到0-s和1-s,而不是数组元素的实际名称。

我基本上需要一些关于如何使它正常工作的建议,如果你能告诉我一个更有效的方法来写所有的东西,同时解决问题,我不介意。

<?php 
$food = array(
'Healthy'=>array(   'Salad'=> array('Fruit Salad','Tropical Salad'), 
                    'Vegetables'=>array('Carrot','Cucumber'), 
                    'Pasta'),
'Unhealthy'=>array('Pizza','Ice Cream')
);
foreach ($food as $type=>$food_types) {
    echo '<b>'.$type.'</b>'.'<br>';
    if (is_array($food_types)) {
        foreach($food_types as $type_names=>$fruits) {
            if (isset($type_names) && !empty($type_names) && is_array($fruits)) {
                echo $type_names.'<br>';
                foreach ($fruits as $name_of_fruits) {
                    echo '<i>'.$name_of_fruits.'</i>'.'<br>';
                }
            } 
        }
    } else {
        echo $food_types;
    }
}
 ?>

* * * * *更新感谢celeriko的评论,我发现了这个问题,作为PHP的新手,我真的不知道"Healthy Food"的类型不是数组,实际上是大"Healthy Food"数组的第一个索引,因为其他两个是数组,不算作实际的索引。

这里是修复代码,再次感谢cerleriko !

<?php 
$food = array(
'Healthy'=>array(   'Salad'=> array('Fruit Salad','Tropical Salad'), 
                    'Vegetables'=>array('Carrot','Cucumber'), 
                    'Pasta'),
'Unhealthy'=>array('Pizza','Ice Cream')
);

foreach ($food as $type=>$food_types) {
    echo '<b>'.$type.'</b>'.'<br>';
    if (is_array($food_types)) {
        foreach($food_types as $type_names=>$fruits) {
            if (isset($type_names) && !empty($type_names) && is_array($fruits)) {
                echo $type_names.'<br>';
                foreach ($fruits as $name_of_fruits) {
                    echo '<i>'.$name_of_fruits.'</i>'.'<br>';
                }
            } else {
                echo $fruits.'<br>'; /* Here I had to enter this line and everything works fine! */
            }
        }
    } else {
        echo $food_types;
    }
}
 ?>

很高兴你得到了它的修复,但对于问题"输出多维数组更动态的方式",这里是一个递归的。它将level-X类设置为div,您可以为其设置样式:

function print_it($array) {
    static $level = 1;
    foreach($array as $k => $v) {
        if(!is_numeric($k)) {
            echo '<div class="level-'.$level.'">'.$k.'</div>'.PHP_EOL;
        }
        if(is_array($v)) {
            $level++;
            print_it($v);
            $level--;
        } else {
            echo '<div class="level-'.$level.'">'.$v.'</div>'.PHP_EOL;
        }
    }
}
print_it($food);