2012-01-29 14 views
1

3列ごとに新しい行を作るようにしたいと思います。私は失われた午前とさえ私はそれになりたいと思い、他のposts.Soを読んだ後、これを行う方法を見つけ出すことはできません PHP foreachテーブルの列

ようなアイコンアイコンアイコン
アイコンアイコンアイコン
アイコンアイコンアイコン
など。 ..

foreach($sMenu as $row) { 
    $sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    $sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    $sSiteRoot = get('site-root'); 

    $row['url'] .= ($row['url'] == '') ? '' : '/'; 

    $url = $sSiteRoot . $row['url']; 
    $url = str_replace('(', '%28', $url); 
    $url = str_replace(')', '%29', $url); 
    $url = str_replace("'", '%27', $url); 
    $sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 
} 
+0

これを行うための最も簡単な方法です( '$ I = 0 ')。次に、数字が2( 'if($ i == 2)')に等しいかどうかを確認してください。ちょうどあなたの ''を追加して(必要なものは何でも) $ i'変数。それから、あなたが持っている 'foreach'ループを続けてください。 – summea

+0

だからどこでコードに実装しますか?それは –

+0

でしょうか?私はちょうどその答えを下記の答えに入れます...そしてうまくいけば、そのコードは読みやすくなります。 :) – summea

答えて

5

これを行う最も簡単な方法は、このループを何回実行するかを変数に記録することです。例えば、(この場合)

$i = 0; 

そして、ループの内部、ちょうど数$iが2に等しいかどうかを確認

foreach($sMenu as $row) { 

    // this is all your old code right here... 

    if ($i == 2) { 
     // then add your </tr><tr> break or whatever... 
     $i = 0; 
    } else { 
     $i++; 
    } 
} 

そして、ちょうどforeachのを経由保ちますループ。

これは、この「行ブレーク」チェックを書き込むためのクリーンな方法としてmodulus operatorを使用してもを行うことができます(ここでは他の回答で示したように。)

+1

+各ループの最後に$ iをインクリメント – clime

+0

haha​​haあなたは私にそれを打つ... – SolidSnake

+0

これはそれを行う方法の一つです:) – summea

2

使用modulus(%)と出力の新しい行の場合カウンタが3で割り切れる:

$i = 0; 

foreach($sMenu as $row) { 
    $i += 1; 

    $sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    $sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    $sSiteRoot = get('site-root'); 

    $row['url'] .= ($row['url'] == '') ? '' : '/'; 

    $url = $sSiteRoot . $row['url']; 
    $url = str_replace('(', '%28', $url); 
    $url = str_replace(')', '%29', $url); 
    $url = str_replace("'", '%27', $url); 
    $sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 

    if($i % 3 == 0) { 
     $sNavigation2 .= '</tr><tr>'; 
    } 
} 
0

あなたは、配列のインデックスとして「キー」を利用することができます:全ての三つの項目をチェックする

foreach($sMenu as $index=>$row) 
{ 
    if(($index)%3==0){$sNavigation2 .= "<tr>";} 
    //$sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    //$sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    //$sSiteRoot = get('site-root'); 

    //$row['url'] .= ($row['url'] == '') ? '' : '/'; 

    //$url = $sSiteRoot . $row['url']; 
    //$url = str_replace('(', '%28', $url); 
    //$url = str_replace(')', '%29', $url); 
    //$url = str_replace("'", '%27', $url); 
    //$sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 
    if(($index+1)%3==0){$sNavigation2 .= "</tr>";} 
} 
if(count($sMenu)%3 != 2){$sNavigation2 .= "</tr>";} 
0

一つの方法は、01を使用することですは、除算時に剰余をチェックします。

は、ここでは、始めるためにいくつかの擬似コードです:変数は、あなたがこのループを実行する回数を追跡持つように時々

$counter = 0; 
// start the first row 
$html = '<tr>'; 
foreach($sMenu as $row) { 
    //add an item 
    $html .= '<td>' . $row[ 'id' ] . '</td>'; 
    //increment the counter, which is used to keep track of the number of items 
    $counter++; 
    //if $counter/3 has zero as a remainder, it's divisible by three 
    if($counter % 3 === 0) { 
     //end the row after 3 items and begin a new one 
     $html .= '</tr><tr>'; 
    } 
} 
//make sure there's an ending <tr> in case it ended on an odd number of items 
$html = preg_replace('/<tr>$/gi', '', $html); 
$html .= '</tr>';