【问题标题】:Display PHP Data in 2 Columns在 2 列中显示 PHP 数据
【发布时间】:2013-10-18 23:36:09
【问题描述】:

这是我的代码:

echo "<table><tr>";
$count = 1; 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
extract($row);
$data = $row['info'];
echo "<td>".$data."</td>"; 
if ($count++ % 2 == 0) {
echo "</tr><tr>";
} 
}
echo "</tr></table>"; 

上面的代码是这样的:

=========
= 1 = 2 =
= 3 = 4 =
= 5 = 6 =
=========

但是如何以这种格式显示信息?

=========
= 1 = 4 =
= 2 = 5 =
= 3 = 6 =
=========

【问题讨论】:

  • 没有。这是另一回事。我想在第一列显示一半的行,在第二列显示另一半。
  • 创建一个包含所有结果的数组。然后拆分成两个数组,每行输出$array1[$row]$array2[$row]
  • 谢谢,但是使用上面的代码我该怎么做呢? ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 的第三行不是已经是一个数组了吗?如果是这样,我会在哪里插入$array1[$row]

标签: php


【解决方案1】:

其实你不需要把数组解析成另一种形式...

<?php
$a = array(1,2,3,4,5,6,7);
$c = ceil(count($a)/2);
echo "<table>";
for($i=0; $i<$c;++$i){
    echo "<tr><td>{$a[$i]}</td><td>{$a[$i+$c]}</td></tr>";
}
echo "</table>";
?>

当然,您需要通过添加 db 操作(如 mysql_num_rows 而不是 count)来修改此代码,但它工作正常:enter link description here

【讨论】:

    【解决方案2】:

    谢谢各位!感谢您的所有帮助,但这段代码对我来说非常完美。我只是想与其他可能觉得这很有帮助的人分享。 :)

    $tmp=array(); 
    $columns=2; 
    
    $row=ceil(mysql_num_rows($result)/$columns);  
    for ($x =1; $x <= $columns; $x++) 
      for ($y = 1; $y <= $row; $y++) 
         $tmp[$x][$y]=mysql_fetch_array($result); 
    
    echo "<table align=center width=\"50%\">\n"; 
      for ($y =1; $y <= $row; $y++) { 
       echo "<tr>"; 
      for ($x = 1; $x <= $columns; $x++) 
        if (isset($tmp[$x][$y]['ID'])) 
            echo "<td>".$tmp[$x][$y]['info']." </a></td>"; 
        else 
            echo "<td></td>"; 
    echo "</tr>\n"; 
    } 
    echo "</table>\n";  
    

    【讨论】:

      【解决方案3】:

      一个简短的 PSA...mysql_ 扩展名已被贬值,最终将被删除。您现在需要开始使用mysqli_

      您需要先解析数据。完成后,生成表格就很容易了。这应该适用于所有数据集

      echo "<table>";
      $count = 1;
      $col1 = $col2 = array();
      $rowcount = round(mysql_num_rows($result) / 2);
      while($row = mysql_fetch_assoc($result)) { 
          if($count > $rowcount) $col2[] = $row['info'];
          else $col1[] = $row['info'];
          $count++;
      }
      $counter = 0; // Arrays start with 0
      foreach($col1 as $row) { // $col1 will always be >= $col2
          $row2 = (isset($col2[$counter])) ? $col2[$counter] : "";
          echo "<tr><td>" . $row . "</td><td>" . $row2 . "</td></tr>"; 
          $counter++;
      }
      echo "</table>";
      

      【讨论】:

      • 谢谢,@Machavity!我用另一个代码修复了它,但我会在 6 小时内发布它以与他人分享。 :)
      【解决方案4】:

      这是未经测试的,但您可以通过 2 个循环干净地实现这一目标。根据$count 变量构建左右列。一直构建 HTML,然后回显它。

      编辑:我没有意识到您将数据分成两半并将前半部分放在表格的左列。我已更改以下代码来执行此操作。

      <?php
      
      $left = array();
      $right = array();
      $count = 1;
      
      $num_rows = mysql_num_rows($result);
      
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
          if ($count <= $num_rows/2) {
              array_push($left, $row['info']);
          } else {
              array_push($right, $row['info']);
          }
          $count++;
      }
      
      $html = "<table>";
      
      for ($i = 0; $i < $count; $i++) {
          $html .= "<tr><td>" 
              . htmlentities($left[$i]) 
              . "</td><td>"
              . htmlentities($right[$i])
              . "</td></tr>";
      }
      
      $html .= "</table>";
      
      echo $html;
      
      ?>
      

      【讨论】:

      • 我认为这会以与原始顺序相同的顺序打印表格。
      • 谢谢,伙计们!稍后我将发布另一个代码。它现在非常适合我。
      【解决方案5】:

      这里有一些 php 魔法,可以稍微缩短代码

      <?php    
       $array = range(1, 20);
      
       $count = 2;
       $out = array_chunk($array, ceil(count($array)/$count));
       array_unshift($out, null);
       $out = call_user_func_array("array_map", $out);
      
      ?>
      <table>
          <?php foreach ($out as $row) : ?>
              <tr>
                  <?php foreach($row as $column) : ?>
                      <td><?php echo( $column ); ?></td>
                  <?php endforeach; ?>
              </tr>
          <?php endforeach; ?>
      </table>
      

      另外,我建议您将与数据库相关的代码切换到 PDO。除了所有这些不错的功能(例如自动转义)之外,您还可以轻松地从数据库查询中获取一组元素,而无需所有这些 mysql_fetch_array 废话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        相关资源
        最近更新 更多