【问题标题】:how to display data in two column with php with header如何使用带有标题的php在两列中显示数据
【发布时间】:2015-02-05 08:45:56
【问题描述】:

我有数据库

---------------------------------------------
no | name   | code |  grade 
---------------------------------------------
1  | john   | A1   | C
2  | john   | A2   | D
3  | john   | A3   | B
4  | tom    | A1   | A
5  | john   | A4   | A
6  | alice  | A1   | C 
7  | alice  | A2   | D
8  | john   | A5   | D
9  | john   | A6   | C
---------------------------------------------

当我想要显示名称为 john 的数据时,我想要 2 列的结果:

---------------------------------------------------------------
no | name   | code   |  grade | no | name   | code   |  grade |
---------------------------------------------------------------
1  | john   | A1     | C      | 5  | john   | A5     | D      |
2  | john   | A2     | D      | 6  | john   | A6     | C      |      
3  | john   | A3     | B      |    |        |        |        |
4  | john   | A4     | A      |    |        |        |        |
---------------------------------------------------------------

这是我已经尝试过的代码

$result = mysql_query("select * from grade ");

echo "<table border='1'><tr>";
echo "<td>no</td>";
echo "<td>name</td>";
echo "<td>code</td>";
echo "<td>grade</td></tr><tr>";

$no = 1;
$count = 1;

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    extract($row);

    echo "<td>$no</td>";
    echo "<td>$row[name]</td>";
    echo "<td>$row[code]</td>";
    echo "<td>$row[grade]</td>";

    if ($count++ % 2 == 0)
    {
        echo "</tr><tr>";
        $no++;
    }
}

echo "</tr></table>";

但结果不是我想要的,这是我运行代码时的结果


no | name   | code   |  grade |    |        |        |        |
---------------------------------------------------------------
1  | john   | A1     | C      | 1  | john   | A4     | A      |
2  | john   | A2     | D      | 2  | john   | A5     | D      |      
3  | john   | A3     | B      | 3  | john   | A6     | C      |
---------------------------------------------------------------

谁能帮帮我……谢谢

【问题讨论】:

  • 你试过了吗??

标签: php mysql multiple-columns


【解决方案1】:

这是表示问题,因此可以通过两种方式解决。
1.您可以使用modern HTML 制作此列:

<section style="-webkit-column-count:2; -webkit-column-gap:15;">
    <div class='columns'>
        <table>
            <tr>
                <th>no</th>
                <th>name</th>
                <th>code</th>
                <th>grade</th>
            </tr>
<?php
$result = mysql_query("select * from grade ");
$no = 1;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo '<tr>';
    echo "<td>{$row['no']}</td>";
    echo "<td>{$row['name']}</td>";
    echo "<td>{$row['code']}</td>";
    echo "<td>{$row['grade']}</td>";
    echo '</tr>';
    $no++;
}
?>
        </table>
    </div>
</section>

2.如果您想坚持使用普通表格,则必须进行一些计算: 首先,你需要知道你要展示的全部成绩。您可以使用 SQL 查询(更有效的方式)来获取它,我将通过将所有数据预加载到数组来实现。为简洁起见,省略了 HTML 页脚和页眉。

<?php
$data = array();
$result = mysql_query('SELECT * FROM grade;');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $data[] = $row;
}

$rows = (int) ceil(count($data)/2);

for ($i=0; $i < $rows; $i++) {
    $no = $i + 1;
    echo '<tr>';
    echo "<td>{$no}</td>";
    echo "<td>{$data[$i]['name']}</td>";
    echo "<td>{$data[$i]['code']}</td>";
    echo "<td>{$data[$i]['grade']}</td>";
    if (array_key_exists($i + $rows, $data)) {
        $no = $i + $rows + 1;
        echo "<td>{$no}</td>";
        echo "<td>{$data[$i + $rows]['name']}</td>";
        echo "<td>{$data[$i + $rows]['code']}</td>";
        echo "<td>{$data[$i + $rows]['grade']}</td>";
    } else {
        echo "<td>&nbsp;</td>";
        echo "<td>&nbsp;</td>";
        echo "<td>&nbsp;</td>";
        echo "<td>&nbsp;</td>";
    }
    echo "</tr>\n";
}

【讨论】:

  • 不要忘记接受正确的答案 :) Ofc,我希望它是我的 :) 并随时要求澄清 - 如果可能和需要,我想改进我的答案。
  • 我尝试你的代码 2,但有错误。输出:1johnA1C 警告:array_key_exists():第一个参数应该是字符串或整数 2johnA2D
  • 是的,对我来说 ceil() 函数的行为有点出乎我的意料——它返回浮点数而不是 int。所以我添加了显式到 int 转换。我还修正了所有的错别字。所以现在它正在使用我的 php54 解释器:)
  • 您是否添加了我第二次省略的页眉和页脚(您可以从第一个示例中获取)?这是你应该看到的(我为这个例子创建了一些虚拟数据):s23.postimg.org/n9glm1s8r/…我在这里发布了带有虚拟数据的完整代码:gist.github.com/dorantor/dfdd1435c4097b26486b
  • @DonyAditya,你能把我的回答标记为“接受”吗? :)
【解决方案2】:

我没有对此进行测试,也没有检查过错误,但我认为它与您想要完成的目标一致。

$result = mysql_query("select * from grade ");
$orig_count = mysql_num_rows($result);

if ( $orig_count % 2 != 0 )
     $count = $orig_count + 1;

$cols = $count / 2; 

//draw header
echo "<table border='1'><tr>";
echo "<td>no</td>";
echo "<td>name</td>";
echo "<td>code</td>";
echo "<td>grade</td></tr><tr>"

for ( $i = 0; $i < $cols; i++ )
{
     if ( $orig_count == 0 )
          break; //zero results

     //first column    
     echo "<td>$i</td>";
     echo "<td>".mysql_result( $result, $i, "name" )."</td>";
     echo "<td>".mysql_result( $result, $i, "code" )."</td>";
     echo "<td>".mysql_result( $result, $i, "grade" )."</td>"; 

     //second column
     if ( $i > $orig_count )
     {
          echo "<td>&nbsp;</td>";
          echo "<td>&nbsp;</td>";
          echo "<td>&nbsp;</td>";
          echo "<td>&nbsp;</td>";   
     }
     else
     {
          echo "<td>".$i+($count/2)."</td>";
          echo "<td>".mysql_result( $result, $i+($count/2), "name" )."</td>";
          echo "<td>".mysql_result( $result, $i+($count/2), "code" )."</td>";
          echo "<td>".mysql_result( $result, $i+($count/2), "grade" )."</td>";   
     }
}

//finish off
echo "</tr></table>";

【讨论】:

  • -1 for:你的代码有错误,你没有尝试测试它,并且在需要绘制两次时只绘制一次标题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2019-01-13
  • 2019-08-17
  • 1970-01-01
  • 2021-02-04
相关资源
最近更新 更多