如何在PHP中使用foreach循环在html中创建表

时间:2017-04-29 13:44:15

标签: php html foreach

我正在尝试使用php中的foreach循环创建一个表。我觉得这是一个简单的修复,我可能会过度思考它。我能够从单独的包含文件中提取所有数据,但无法在approrpiate列中列出列。

我有一个单独的文件,其中包含以下数组:

    <?php
     $shop=array(
             'cost'=>array('cd1'=>18, 'cd2'=>11, 'cd3'=>11, 'cd4'=>17, 'cd5'=>21),
             'name'=>array('cd1'=>'Blink 182', 'cd2'=>'George Jones', 'cd3'=>'Sum 41', 'cd4'=>'Filter', 'cd5'=>'Saliva'),
             'quantity'=>array('cd1'=>9, 'cd2'=>8, 'cd3'=>62, 'cd4'=>21, 'cd5'=>41)
             );
      ?>

以下是我试图将上述数据拉入以创建html表的代码:

   <?php
    include('shop.php');
     $headers=$body="";
    $html1 = "<h3>Catalog</h3><table border='1'><tr><th>ID</th>\n";
    foreach($catalog as $key=>$value){ 
  $headers .= "<th>".$key."</th>\n";
  }
   $html2 = "</tr>\n";
  // use a foreach loop to create $body from the data
  $body= "";  
  foreach ($catalog as $key=>$value) {
       foreach ($value as $values){
             $body .= "<tr><td>".$key."</td></tr>\n";
     $body .= "<tr><td>".$values."</td></tr>";  
     }
 }
  echo '</table>';
  $html3 = "</table>";
  $result = $html1.$headers.$html2.$body.$html3; // concatenations for html
     echo $result; 
  ?>

以上内容会将所有值列在第一列ID中。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:0)

您以错误的顺序循环遍历数组。外部循环必须是行,但$catalog的键是列。

$keys = array_keys($catalog);
$first_key = $keys[0];
foreach ($catalog[$first_key] as $id => $value) {
    $body .= "<tr><td>" . $id . "</td>";
    foreach ($keys as $k) {
        $body .= "<td>" . $catalog[$k][$id] . "</td>";
    }
    $body .= "</tr>";
}

这很复杂的原因是因为您的数据组织不佳。如果将所有相关信息组合在一起,而不是将它们放在单独的数组中,那会好得多。

$catalog = array(
    'cd1' => array('name' => 'Blink 182', 'cost' => 18, 'quantity' => 9),
    'cd2' => array('name' => 'George Jones', 'cost' => 11, 'quantity' => 8),
    ...
);

这是嵌套循环可以使用的结构类型。