PHP foreachloop с таблицами HTML - PullRequest
3 голосов
/ 15 июля 2011

У меня есть цикл foreach для 'n' количества ячеек.Я хочу отобразить 4 ячейки в каждом ряду и пересмотреть в следующем ряду.Как ограничить 4 ячейки в каждой строке внутри цикла foreach.

Прямо сейчас под кодом отобразить все ячейки в одной строке

  print '<table border="2">';
  print '<tr>';
 foreach($Cubicle as $cubicle )
   {
    print '<td>';

        if($nodeStatus == '0'){
            printf('<a href= "#"  style="color: green; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }
        elseif($nodeStatus == '1'){
            printf('<a href= "#"  style="color: #AF7817; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }
        else{
            printf('<a href= "#"  style="color: RED; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }   

        print '</td>';

    }

Ответы [ 7 ]

4 голосов
/ 15 июля 2011

Используйте array_chunk PHP Manual , чтобы получить 4 значения для каждой строки:

 echo '<table border="2">';
 foreach(array_chunk($Cubicle, 4) as $row )
 {
   echo '<tr>';
   foreach($row as $col)
   {
     echo '<td>', $col /* your column formatting */, '</td>';
   }
   echo '</tr>';
  }
 echo '</table>';
1 голос
/ 15 июля 2011
 print '<table border="2">';
 print '<tr>';
 $rowNum = 0;
 foreach($Cubicle as $cubicle){
     $rowNum++;

     if($rowNum % 4 == 0){ echo '<tr>'; }

     print '<td>';

     if($nodeStatus == '0'){
         printf('<a href= "#"  style="color: green; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }
        elseif($nodeStatus == '1'){
            printf('<a href= "#"  style="color: #AF7817; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }
        else{
            printf('<a href= "#"  style="color: RED; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
        }   

        print '</td>';

     if($rowNum % 4 == 0){ echo '</tr>'; }

    }
1 голос
/ 15 июля 2011

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

Вот пример:

<?php

define('NUM_COLUMNS', 4);

$cubicle = array('A', 'B', 'C', 'D', 'E', 'F');

if( empty($cubicle) ){
    echo '<p>No cubicles found.</p>';

}else{
    echo '<table>' . PHP_EOL;

    $column = 0;
    foreach($cubicle as $cubicle_name){
        if( $column==0 ){
            echo '<tr>';
        }

        echo '<td>' . htmlspecialchars($cubicle_name) . '</td>';

        if( $column==NUM_COLUMNS-1 ){
            echo '</tr>' . PHP_EOL;
        }

        $column = ($column+1) % NUM_COLUMNS;
    }

    // Fill gaps
    if( $column>0 ){
        while( $column<NUM_COLUMNS ){
            echo '<td>—</td>';
            $column++;
        }
        echo '</tr>' . PHP_EOL;
    }

    echo '</table>' . PHP_EOL;
}
1 голос
/ 15 июля 2011

попробуйте это.

print '<table border="2">';

$s=0;
foreach($Cubicle as $cubicle )
{
    if($s == 0){
        echo $open_tr = '<tr>';
    }else if($s % ceil(count($Cubicle)/4) == 0){
        echo $open_ul = '</tr><tr>';
    }else{
        echo $open_ul = '';
    }
    print '<td>';

    if($nodeStatus == '0'){
        printf('<a href= "#"  style="color: green; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
    }
    elseif($nodeStatus == '1'){
        printf('<a href= "#"  style="color: #AF7817; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
    }
    else{
        printf('<a href= "#"  style="color: RED; font-weight:bold" onClick="showDetails(\'%s\');">%s</a> ', $nodeId,$insert);
    }   

    print '</td>';

    if($s == (count($Cubicle) - 1)){
        echo '</tr>';
        $s++;
    }

}
1 голос
/ 15 июля 2011

Это должно сработать, и оно гибкое:

function printTable($cubicles, $items_per_row) {
    print '<table border="2">';
    while($row = array_splice($cubicles, 0, $items_per_row)) {
        print '<tr>';
        printRow($row, $items_per_row);
        print '</tr>';
    }
    print '</table>';
}

function printRow($cubicles, $items_per_row) {
    for($i=0; $i<$items_per_row; $i++) {
        print '<td>';
        print (isset($cubicles[$i]) ? $cubicles[$i] : '&nbsp;');
        print '</td>';
    }
}

printTable($Cubicle, 4);
1 голос
/ 15 июля 2011
print '<table border="2">';
print '<tr>';
$cellIndex = 0;
foreach($Cubicle as $cubicle )
{
   if ((++$cellIndex % 4) == 0) {
      print '</tr><tr>';
   }
   print '<td>';
   ...
1 голос
/ 15 июля 2011
 print '<table border="2">';
 print '<tr>';
 foreach($Cubicle as $num => $cubicle )
 {
   if ($num%4 == 0)
   {
     print '</tr><tr>';
   }
   print '<td>';
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...