1

这是我的代码:

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 =
=========
4

5 回答 5

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)来修改此代码,但它工作正常:在此处输入链接描述

于 2013-10-11T02:53:49.013 回答
1

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

$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";  
于 2013-10-11T10:44:26.443 回答
0

这是一些 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废话。

于 2013-10-11T11:37:22.080 回答
0

一个简短的 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>";
于 2013-10-11T02:27:26.763 回答
0

这是未经测试的,但您可以通过 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;

?>
于 2013-10-11T02:32:27.633 回答