我在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
答案 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);