PHP foreach столбцы таблицы - PullRequest
1 голос
/ 29 января 2012

Я хочу сделать так, чтобы каждые 3 столбца он формировал новую строку. Я заблудился и не могу понять, как это сделать даже после прочтения других постов. Так что я бы хотел, чтобы это было похоже на

значок значок значок
icon icon icon
значок значок значок
и т.д ....

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>';
}

Ответы [ 4 ]

5 голосов
/ 29 января 2012

Иногда самый простой способ сделать это - иметь переменную, отслеживающую, сколько раз вы выполняете этот цикл. Например:

$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.

Это также можно сделать с помощью оператора модуля в качестве более чистого способа написания этой проверки "разрыва строки" (как показано другими ответами здесь).

2 голосов
/ 29 января 2012

Используйте модуль (%) и выведите новую строку, если счетчик делится на 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 голосов
/ 29 января 2012

Один из способов проверки каждых трех элементов - использовать оператор по модулю , который проверяет остаток после деления.

Вот некоторый psuedocode, с которого можно начать:

$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>'; 
0 голосов
/ 29 января 2012

вы можете использовать «ключ» в качестве индекса в массиве:

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>";}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...