Php Foreach如果是多维的,否则没有循环,最干净的解决方案
我有一些标记需要根据数组进行相应的循环,如果它是多维的,我必须以一种方式循环它,如果不是,我就不必循环它 现在,我通过执行一个大的'ol if/else来解决这个问题,如果不是多维的,则打印“静态”标记,如果是多维的,则循环标记。这和heeell一样难看,让我使用了两个相同的标记块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
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;