2014-11-25 2 views
3

У меня есть массив $day и хочу, чтобы отобразить этот массив в виде таблицы (я работаю с CI)PHP Foreach массив таблица отображение

Array ( 
[START_EXECUTION] => 
    Array ( 
     [0] => 27-OCT-14 
     [1] => 28-OCT-14 
     [2] => 29-OCT-14 
     ) 
[NUM_OF_POPULATION] => 
    Array ( 
     [0] => 6171 
     [1] => 6990 
     [2] => 6882 
     ) 
[SUM_AMOUNT] => 
     Array ( 
     [0] => 361154716.01 
     [1] => 409210099.77 
     [2] => 407191552.71 
     ) 
) 

Вот мой код, который я использую в виде:

<?php 
if(count($day)>0){ 
    print_r($day); 
    foreach($day as $index => $dt1_element){  
?>   
    <table class='table'> 
     <tr> 
     <td><?= $index ?></td> 
     </tr>   
<?php 
    foreach($dt1_element as $row){   
?> 
     </tr> 
     <td><?= $row ?></td> 
<?php 
    } 
?> 
     </tr> 
<?php 
    } 
?> 
    </table> 
<?php 
    } 
? 

Но то, что я получаю так:

START_EXECUTION 
27-OCT-14 
28-OCT-14 
29-OCT-14 

NUM_OF_POPULATION 
6171 
6990 
6882 

SUM_AMOUNT 
361154716.01 
409210099.77 
407191552.71 

результат должен быть:

START_EXECUTION NUM_OF_POPULATION SUM_AMOUNT 
27-OCT-14   6171    361154716.01 
28-OCT-14   6990    409210099.77 
29-OCT-14   6882    407191552.71 

Просьба показать мне правильный foreach, чтобы получить желаемый результат. Спасибо

ответ

3

Попробуйте это:

echo '<table>'; 

$cols = array_keys($day); 
echo '<tr>'; 
foreach ($cols as $col) echo '<th>' . $col . '</th>'; 
echo '</tr>'; 

foreach ($day[$cols[0]] as $i => $null) { 
    echo '<tr>'; 
    foreach ($cols as $col) echo '<td>' . $day[$col][$i] . '</td>'; 
    echo '</tr>'; 
} 

echo '</table>'; 

enter image description here

demo

+0

Отличный ответ. – Pupil

0

Вы необязательно закрываете <tr>.

Все, что вам нужно, это количество детей в отдельной строке.

Исправленный код:

<?php 
if(count($day)>0){ 
    print_r($day); 
    foreach($day as $index => $dt1_element){  
?>   
    <table class='table'> 
     <tr> 
     <td><?php echo $index;?></td> 
     </tr>   
<?php 
$tds = array(); 
    foreach($dt1_element as $row){   
       $tds[] = '<td>'.$row.'</td>'; 
?> 
<?php 
    } 
    echo "<tr>". impldoe(' ', $tds) ."</tr>"; 
    ?> 

    <?php 
    } 
?> 
    </table> 
<?php 
    } 
?> 
+0

Благодарим за ответ, но я все равно получаю тот же результат –

+0

Ответ обновлен, он должен работать сейчас. – Pupil

0

если вы используете PHP> = 5,5, чем

echo "<table>"; 

$cols = array_keys($day); 
echo "<tr><th>"; 
echo implode('</th><th>', $cols); 
echo "</th></tr>"; 

for ($i = 0, $num = count($cols); $i < $num; ++$i) 
{ 
    echo "<tr><td>"; 
    echo implode('</td><td>', array_column($day, $i)); 
    echo "</td></tr>"; 
} 

echo "</table>"; 
0

Здесь работает отлично

print "<table><tr><th>START_EXECUTION |</th><th>NUM_OF_POPULATION |</th><th>SUM_AMOUNT |</th></tr>"; 
//$index=0; 
foreach($vals['START_EXECUTION'] as $index=>$values){ 

    echo "<tr><td>$values</td><td>".$vals['NUM_OF_POPULATION'][$index]."</td><td>".$vals['SUM_AMOUNT'][$index]."</td></tr>"; 
    //$index++; 
} print '</table>'; 

для demo here

0

Мой ответ вдохновлен картины «Two-Step View», где я строить логические данные для зрения, чтобы избежать каких-либо ненужных сведений, в представлении (например, я не фанат с индексами массива в представлениях, если я могу помочь ему):

<?php 
    $arr = array(
     'START_EXECUTION'=>array(
      '27-OCT-14', 
      '28-OCT-14', 
      '29-OCT-14', 
     ), 
     'NUM_OF_POPULATION'=>array(
      6171, 
      6990, 
      6882, 
     ), 
     'SUM_AMOUNT'=>array(
      361154716.01, 
      409210099.77, 
      407191552.71, 
     ), 
    ); 

    $headers = array_keys($arr); 

    $body = array_map(function($a, $b, $c) { return array($a, $b, $c); }, 
     $arr['START_EXECUTION'], 
     $arr['NUM_OF_POPULATION'], 
     $arr['SUM_AMOUNT'] 
    ); 

    $table = array(
     'headers'=>$headers, 
     'body'=>$body, 
    ); 
?> 

$table будет содержать логическую структуру таблицы в независимом виде.

Мы можем создать простой виджет, который будет преобразовывать логические данные в HTML таблицу следующим образом:

<table class="table"> 
    <thead> 
    <tr> 
     <?php foreach($table['headers'] as $header): ?> 
      <th><?php echo $header; ?></th> 
     <?php endforeach; ?> 
    </tr> 
    </thead> 
    <tbody> 
    <?php foreach ($table['body'] as $row): ?> 
    <tr> 
    <?php foreach ($row as $col): ?> 
      <td><?php echo $col; ?></td> 
    <?php endforeach; ?> 
     </tr> 
    <?php endforeach; ?> 
    </tbody> 
</table> 

Пока вы поддерживаете ту же логическую структуру, HTML-фрагмент кода может размещаться внутри " виджет ", и это начало рендеринга таблицы.

Примечание Это просто прототип и не предназначен для комплексного решения.

0
$data = array($FIELDS);//field value like name,email,password etc. 
foreach($data as $row) 
{ 
    echo "<tr>"; 
    foreach($row as $column){ 
    echo "<th>".$column."</th>"; 
} 
echo "</tr>"; 
} 

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

Смежные вопросы