Php Foreach如果是多维的,否则没有循环,最干净的解决方案

Php Foreach如果是多维的,否则没有循环,最干净的解决方案,php,html,multidimensional-array,Php,Html,Multidimensional Array,我有一些标记需要根据数组进行相应的循环,如果它是多维的,我必须以一种方式循环它,如果不是,我就不必循环它 现在,我通过执行一个大的'ol if/else来解决这个问题,如果不是多维的,则打印“静态”标记,如果是多维的,则循环标记。这和heeell一样难看,让我使用了两个相同的标记块 if (count($data_array) == count($data_array, COUNT_RECURSIVE)) { block of html } else { looped-almost s

我有一些标记需要根据数组进行相应的循环,如果它是多维的,我必须以一种方式循环它,如果不是,我就不必循环它

现在,我通过执行一个大的'ol if/else来解决这个问题,如果不是多维的,则打印“静态”标记,如果是多维的,则循环标记。这和heeell一样难看,让我使用了两个相同的标记块

if (count($data_array) == count($data_array, COUNT_RECURSIVE)) 
    { block of html }
else
{ looped-almost same block of html }
如果有人对此有更好的解决方案,我很乐意实施:)

编辑:为了清除,我有一个表,它的属性循环或不循环

foreach($i as $b => $v)
$v['item']
其中,
$v['item']
如果数组是多维的,则在表中运行 如果数组不是多维的,我只使用
$i['item']


wich让我使用两个相同的html块唯一的区别是$v/$i

在您更新答案后,我认为只需使用检查
$array['item']
即可解决您的问题

例如:

if(isset($array['item'])) {
    // Do non-recursive stuff
}
else {
    // Do more checks and recursive stuff
}

旧答案:

你考虑过吗


通过这样做解决了这个问题:

  if(is_array($v))
    {
        $table_array = $v;
    }
    else
    {
        $table_array = $i;
        $single = true;
    }
在foreach循环内部和循环结束时

if(isset($single))
    break;

没那么热。。。。但至少我不会复制html:)

两个html块完全相同或不同?我想这看起来更好,但它仍然无法解决$value['item']和$yourArray['item']的冗余问题,标记仍然需要复制。您没有提到
$value['item']
。请为您的问题添加更多信息。is_array()无法正确解决问题,因为我认为他想检查数组是单维还是多维的。is_array可以工作,因为如果数组不是多维的,$v将不是数组,但isset无法解决我的冗余问题,我想至少不会
if(isset($single))
    break;