PHP:如何输出动态多维数组值?

时间:2014-01-07 06:51:41

标签: php arrays

我在PHP中有这样的数组:

$array = array(
     'main0' => array(
        'level0' => array('0'=>'value_1'),
        'level1' => array(
               '0' => 'value_2',
               '1' => 'value_3',
               ),
        'level2' => array('0'=>'value_445')
        ),
     'main1' => array(
        'level0' => array('0'=>'value_1'),
        'level1' => array('0'=>'value_12'),
        'level2' => array(
               '0' => 'value_2',
               '1' => 'value_3',
               ),
        'level3' => array('0'=>'value_5')
        ),
);

这个数组将是动态的,对于许多主键和级别,每个级别也有动态数量的值。

我的问题是,我正在尝试回显select option html标记中的每个数组级别。我试过foreach ($array[][] as $value)但没有运气。如何在PHP中实现这一点?

修改

使用3 foreach解决了我的问题,可能不是最干净的解决方案,但它有效。我在blade php中的解决方案:

<?php $data = Product::GetCategories(); ?>
        @if ($data != null)
            @foreach ($data as $item)
                <optgroup label="{{ $item[0][0] }}">
                    @foreach ($item as $level)
                        @foreach ($level as $v)
                            <option value="{{ $v }}">{{ $v }}</option>
                        @endforeach
                    @endforeach
                </optgroup>
            @endforeach
        @endif

4 个答案:

答案 0 :(得分:2)

如果你真的不关心操纵数组项目,而你想要的只是在屏幕上看到结果,你可以使用:print_r($array);

如果你确实需要对数组项做些什么,那么这里是一个递归函数(myRecursiveFunction),以及一个在非数组(myNormalFunction)上执行的普通函数来说明这个过程。

function myRecursiveFunction($array) {
    foreach($array as $key=>$value) {
        if(is_array($value)) {
             myRecursiveFunction($value);
        }
        myNormalFunction($value);
    }
}

答案 1 :(得分:0)

对于初学者来说,使用像DomDocument这样的东西来操纵php中的html。

除此之外尝试:

foreach ($array as $key => $value ) {
    print $key . " " . $value;
}

要进一步嵌套,请记住is_array,现在您的代码变为

foreach ($array as $key => $value ) {
    print $key . " " . $value;
    if(is_array($value)) {
         //do something with this array
    }
}

你可以在这里使用递归做一些事情,但是使用像DomDocument这样的东西会更好,它可以维护一个递归树,让你用更少的代码进行遍历。

答案 2 :(得分:0)

你可以在这里使用递归。

试试这个。

function traverse($array){
    foreach($array as $item){
       if(is_array($item)){
           traverse($item);
       }else echo $item . "<br/>";
    }
}

traverse($array);

答案 3 :(得分:0)

如果您不需要动态更深入,那就像是:

foreach($array as $mains) {
    foreach($mains as $level){
        var_dump($level);
    }
}

如果你想在$level有任何孩子的时候更深入,那么:

function explore($array) {
    foreach ($array as $child) {
        if (gettype($child) === 'array')) {
            explore($child);
        } else {
            echo $child;
        }
    }
}

// init
explore($array);