0

配列に応じてループする必要があるマークアップがあります。多次元の場合は一方向にループする必要があり、そうでない場合はループする必要はありません。

現状では、大きな 'ol if/else を実行してこれを解決し、多次元でない場合は「静的」マークアップを出力し、多次元である場合はマークアップをループします。これは非常に見苦しく、2 つの同一のマークアップ ブロックを使用することになります。

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']

これにより、2 つの同一の html ブロッ​​クを使用できます。唯一の違いは $v / $i です。

4

2 に答える 2

2

回答を更新した後、をチェックするだけで問題を解決できる$array['item']と思います。isset

例:

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

古い答え:

考えたことはありis_arrayますか?

for($yourArray as $key => $value) {
    if (is_array($value)) {
        // Do multidimensional stuff
    }
    else {
        // Do normal stuff
    }
}
于 2012-10-18T08:41:42.687 に答える
0

このようにすることでこれを解決しました:

  if(is_array($v))
    {
        $table_array = $v;
    }
    else
    {
        $table_array = $i;
        $single = true;
    }

foreachループの内側、およびループの終わり

if(isset($single))
    break;

それほど暑くはありません....しかし、少なくとも私はhtmlを複製しません:)

于 2012-10-18T09:27:29.247 に答える