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

时间:2014-05-19 17:22:20

标签: php arrays multidimensional-array

所以,我还在学习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;
    }
}

 ?>

** *** UPDATE 感谢celeriko的评论,我发现了问题,作为PHP的新手,我并不是真的知道不是阵列的“健康食品”的类型实际上是大“健康食品”阵列的第一个索引,因为其他两个是数组,并没有算作实际索引。

这是固定代码,再次谢谢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;
    }
}

 ?>

1 个答案:

答案 0 :(得分:0)

很高兴你解决了这个问题,但对于问题&#34; 输出多维数组的更多动态方式&#34;,这里是递归的。它将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);