【问题标题】:Foreach row display as columnForeach 行显示为列
【发布时间】:2012-02-12 20:28:56
【问题描述】:

我有一个非常标准的数据库,例如:

id | name | last_name                | gender 
-----------------------------------------------
1  | John | Doe                      | Male
2  | Jane | Smith Dolores Clayborne  | Female
3  | Paul | Paulson                  | Male

我想在表格中显示它,但是数据库中的每一行都需要是 HTML 表格中的一列:

id        | 1         | 2         | 3      
---------------------------------------------
name      | John      | Jane      | Paul
---------------------------------------------
last_name | Doe       | Smith     | Paulson
          |           | Dolores   |
          |           | Clayborne |
---------------------------------------------
gender    | Male      | Female    | Male 

如果我选择:

foreach($data as $row) {
echo "<tr><td>" . $row->id . "</td></tr>";
echo "<tr><td>" . $row->name . "</td></tr>";
echo "<tr><td>" . $row->last_name . "</td></tr>";
echo "<tr><td>" . $row->gender . "</td></tr>";
}

我在一长列中获取所有数据。如何在每一个 SQL 行之后中断列?

注意:$data 是一个对象数组,其中包含具有字段值的属性(您可以从示例中看出这一点)。

编辑:

我找到了解决办法,看我的回答,简单优雅。

【问题讨论】:

    标签: php html codeigniter foreach html-table


    【解决方案1】:

    我想通了,结果证明这是一个非常简单的解决方案,只需几个周期,并在写入行和单元格之前预先填充数组。

    我测试过,效果很好。 ;) 它可能对某人有用,所以这里是:

    foreach($records as $key => $row) {
           foreach($row as $field => $value) { 
               $recNew[$field][] = $value;
           }
    }
    //This creates a new array composed/transposed with the field names as keys and
    //the "rowed" values as sub-arrays.
    
    echo "<table>\n";
    
    foreach ($recNew as $key => $values) // For every field name (id, name, last_name, gender)
    {
        echo "<tr>\n"; // start the row
        echo "\t<td>" . $key . "</td>\n" ; // create a table cell with the field name
            foreach ($values as $cell) // for every sub-array iterate through all values
            {
               echo "\t<td>" . $cell . "</td>\n"; // write cells next to each other
            }
        echo "</tr>\n"; // end row
    
    }
    
    echo "</table>";
    

    【讨论】:

      【解决方案2】:

      已针对调整后的原始职位要求更新了答案,如下所示:

      这是一种奇怪(或优雅)的方式来完成您想要完成的工作,可能需要进行调整才能使其看起来更漂亮,但它似乎可以在以下网址中看到

      http://www.bluevineconsulting.com/table_test.php

      它在顶部有 php div 方法,并且确实显示了 div 的大小不同,正如您希望不会发生的那样。然而,我想出了适用于桌子的优雅/丑陋的解决方案。

      // i populated a fake object so i could test with it
      $data = new stdClass();
      $data->student1->id = "1";
      $data->student1->name = "Test1";
      $data->student1->last_name = "User1";
      $data->student1->gender = "Male";
      $data->student2->id = "2";
      $data->student2->name = "Test";
      $data->student2->last_name = "User<br>\nMaiden<br>\nOther\n";
      $data->student2->gender = "Female";
      $data->student3->id = "3";
      $data->student3->name = "Test3";
      $data->student3->last_name = "User3";
      $data->student3->gender = "Male";
      $data->student4->id = "4";
      $data->student4->name = "Test4";
      $data->student4->last_name = "User4";
      $data->student4->gender = "Female";
      $data->student5->id = "5";
      $data->student5->name = "Test5";
      $data->student5->last_name = "User5";
      $data->student5->gender = "Female";
      $data->student6->id = "6";
      $data->student6->name = "Test6";
      $data->student6->last_name = "User6";
      $data->student6->gender = "Female";
      $datacount = count($data);
      
      
      foreach($data as $row) {
          $datacount++;
          if (empty($colcount)) {
              foreach ($row as $key => $val) {
                  $colcount++;
                  $keyname[$colcount] = $key;
              }
              echo "Columns = ".$colcount."<br>\n";
           }
      }
      echo "records = ".$datacount."<br>\n<br>\n";
      echo ("<b>PHP Table method:</b><br>\n<br>\n");
      echo ("<table border='1px' cellspacing='0'>\n");
      foreach ($keyname as $key) {
          echo "    <tr style='vertical-align:top;'>\n";
          for ($d = 1; $d < $datacount; $d++) {
              $id = "student".$d;
              echo "        <td>".$data->$id->$key."</td>\n";
           }
          echo "    </tr>\n";
      }
      echo ("</table>\n");
      

      我不得不承认这很奇怪,但它使您的表格保持正确的高度.. 下一个更复杂的部分是设置要显示的列数,因为这种方法使得在 5 列之后中断变得更加复杂,例如我之前的 div 方法。

      【讨论】:

      • 第二个示例可以作为一种解决方法,但这并不能解决 EDITED 情况。我真的需要将数据显示在表格中,因为我需要根据单元格数据使每一行都具有最大高度,即从一起开始。
      • 实际上.. 这很棘手......将行大小与不同的 div 匹配......给我一秒钟。 :)
      • 好的 .. 我已经用一种丑陋/优雅的方法更新了我的答案,只要您不想在第 6 列闯入新表“行”:) ... 但是在功能上它就像你想要的那样工作。
      • 感谢您的努力,但我认为这更复杂。我自己想通了,然后回答了。我会选择我的答案作为确定的答案。还是谢谢你!
      【解决方案3】:

      你应该在每一列的末尾使用“\n”作为新行,“\t”作为制表符:

      foreach($data as $row) {
      
          echo "\t<tr><td>" . $row->id . "</td></tr>\n";
          echo "\t<tr><td>" . $row->name . "</td></tr>\n";
          echo "\t<tr><td>" . $row->last_name . "</td></tr>\n";
          echo "\t<tr><td>" . $row->gender . "</td></tr>\n";
      
      }
      

      【讨论】:

        【解决方案4】:

        这是一个技术含量低的解决方案,但可能就足够了。

        $fmt="<tr><td>%s<br/>%s<br/>%s<br/>%s</td></tr>\n";
        foreach($data as $row) {
          printf($fmt, $row->id, $row->name, $row->lastname, $row->gender);
        }
        

        【讨论】:

        • 不。不能解决问题。还是和我第一次尝试一样。显然中断标签似乎在 td 中不起作用......
        • 那可能在你的样式表中很奇怪。休息应该永远是休息。看看我的建议对你的实际效果会很有趣。
        【解决方案5】:

        最简单的方法是在 div 和一些样式中运行该查询,因此代码将是

        <div align="center" style="float:left; width:100px; ">
        <?    
        $query = "select Something from your database";
        $result = mysql_query($query);  
        $results = mysql_num_rows($result);
        
        //Now run the loop
        for($i=0; $i<$results; $i++)
        {   
        echo'<div align="center" style="float:left; width:100px;">';
        $records=mysql_fetch_assoc($result);
            foreach($records as $item)
            {
            echo'<div style="float:left;">'.$item.'</div>'; 
            }
        echo '</div>';
        }
        ?>
        </div>
        

        【讨论】:

          【解决方案6】:

          我希望这可行,我们可以避免不必要的 for 循环。

          foreach($data as $row) {

          $idRow .= '<td>' . $row->id . '</td>';
          
          $nameRow .= '<td>' . $row->name . '</td>';
          
          $lastNmaeRow .= '<td>' . $row->last_name . '</td>';
          
          $genderRow .=  '<td>' . $row->gender . '</td>';
          

          }

           <tr><td>Id</td>'.$idRow.'</tr>
           <tr><td>Name</td>'.$nameRow.'</tr>
           <tr><td>Last Name</td>'.$lastNmaeRow.'</tr>
           <tr><td>Gender</td>'.$genderRow.'</tr>
          

          【讨论】:

            猜你喜欢
            • 2017-03-03
            • 2016-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-09
            • 2020-10-18
            • 2018-04-26
            • 2016-11-25
            相关资源
            最近更新 更多