1

我有一个返回行数组的 mysql 查询。我将如何垂直使用 php 填充我的 html 表?我的 HTML 表格允许的列数没有限制。

我的 MYSQL 查询每行返回大约 40 列。

MYSQL row1 =>  10|11|12|13|14|15|16|17|18|19
      row2 =>  20|21|22|23|24|25|26|27|28|29
      row3 =>  30|31|32|33|34|35|36|37|38|39

HTML 输出应如下所示

   10 | 20 | 30
   11 | 21 | 31
   12 | 22 | 32
   13 | 23 | 33
   14 | 24 | 34
   15 | 25 | 35
   16 | 26 | 36
   17 | 27 | 37
   18 | 28 | 38
   19 | 29 | 39

这是我的代码,它什么也没显示。

$values = array();

$sql = "SELECT * FROM `TABLE_NAME` ORDER BY `id` ASC LIMIT 0,12";
$result = $_db->query($sql);

$numrows = $_db->num_rows($result);

$c = 1;
while ($c <= $numrows)
{
    $values['col_'.$c] = array(); 
    $c++;
}

$r = 1;

while ($row = $_db->fetch_array($result)) 
{
    $values['col_'.$c][$r] = $row;

    $r++; 
}
echo "<table border='1'>";


for ($r = 1; $r <= $numrows; $r++) 
{
    echo "<tr>";
    for ($c = 1; $c <= sizeof($values['col_1']); $c++) 
    { 
        echo "<td>".$values['col_'.$c][$r]."</td>"; 
    }
    echo "</tr>" ;
}
echo "</table>" ;

知道我做错了什么吗?或者如何使它更简单?(我认为有太多的while循环)

4

7 回答 7

4

我认为您想要的是从 mysql 查询创建 php 数组,转置数组(就像您转置矩阵一样)并显示它。

转置数组是一个已解决的问题(在 php 中转置多维数组

其余的,这很简单......这是我的代码:

$res = mysqli_query(...);

$anarr = array();

while ($row = mysqli_fetch_array($res,$result_type=MYSQLI_ASSOC)){

    $anarr[] = $row;

}

// here is the transpose part
array_unshift($anarr, null);
$transposedarr = call_user_func_array('array_map', $anarr);
// end of the transpose part

echo '<table>';

foreach ($transposedarr as $r){
    echo '<tr>';
    foreach ($r as $c){
        echo '<td>'.$c.'</td>';
    }
    echo '</tr>';
}

echo '</table>';

?>
于 2013-07-12T07:46:46.590 回答
0

您在 while 循环中只分配一行。用下面的代码改变它:

while ($row = $_db->fetch_assoc($result)) 
{
    $values['col_'.$c][$r] = $row;
    $c++;
    $r++; 
}

在这里,您将值分配给$value['col_1'][$r] 而不是增加 的值$c。所以最后它会覆盖这些值。

于 2013-07-12T06:20:07.963 回答
0

你可以简单地说

$values[$rowIndex] = $columnArray

所以在这种情况下

$values[0] = array( 10, 20, 30 );
$values[1] = array( 11, 21, 31 );

然后遍历每个数组

echo "<table border='1'>";
foreach( $values as $row )
{
    echo "<tr>";
    foreach( $row as $columnValue )
    {
        echo ..whatever..
    }
    echo "<tr>";
}
echo "</table>" ;

或类似的东西。不过,我基本上只是对此进行了伪编码,我现在无法访问 php 解释器。

于 2013-07-12T06:20:58.397 回答
0

您可以在一个循环中完成所有操作。此外,至少出于您在本示例中的目的,我不明白为什么您将所有内容都放在一个数组中然后回显,而不是直接回显它。

例如(经过测试):

$sql = "SELECT * FROM `TABLE_NAME` ORDER BY `id` ASC LIMIT 0,12";
$result = $_db->query($sql);

echo "<table border='1'>";

$tab = array();
while ($row = $result->fetch_row())
{
    $tab[] = $row;
}

for( $i = 0, $l = count($tab[$i]); $i < $l; $i++){
    echo "<tr>";
    for( $j = 0, $m = count($tab); $j < $m; $j++){
        echo "<td>".$tab[$j][$i]."</td>";
    }
    echo "</tr>" ;
}

echo "</table>";

更新:我完全改变了我的代码。我最初没有得到你需要的东西。

这段代码对你有帮助吗?

于 2013-07-12T06:21:42.233 回答
0
//while and foreach loop can do this
<?php 

$values = array();

$sql = "SELECT * FROM `TABLE_NAME` ORDER BY `id` ASC LIMIT 0,12";
$result = $_db->query($sql);

$numrows = $_db->num_rows($result);

//check here
if($numrows>0)
{
    //1 row
    $r = 1;
    //column
    $c=0;

    while ($row = $_db->fetch_assoc($result))
    {
        //value row column  
        $values[$r][$c] = $row; 

        //column == 3
        if($c==2)
        {
            //increase row
            $r++;
            //reset column
            $c = 0;

        }else{

            $c++;
        }
    }
    echo "<table border='1'>";


    //display row and columns
    foreach($values as $row)
    {
        echo "<tr>";
        echo "<td>".$values[0]."</td>";
        echo "<td>".$values[1]."</td>";
        echo "<td>".$values[2]."</td>";
        echo "</tr>" ;
    }
    echo "</table>" ;
}
于 2013-07-12T06:24:29.083 回答
0

这就是我要解决的问题。最困难的部分是准备表格的结构。它使用以下语法:$somearray[] = $x,附加$x到 array $somearrayimplode()将数组与您定义的字符串连接在一起。最后但并非最不重要的一点是,您正在使用mysql_fetch_assoc,它返回一个关联数组(Array( [column1] => "val1" );等)。您需要一个编号数组来代替这些类型的操作。这可以通过mysql_fetch_array第二个参数来完成MYSQL_NUM

$arrayOfRows = Array();

$sql = "SELECT * FROM `TABLE_NAME` ORDER BY `id` ASC LIMIT 0,12";
$result = $_db->query($sql);

$firstrun = true;
while( $row = $_db->fetch_array($result, MYSQL_NUM) ) {
  #Setup structure on first run
  if( $firstrun ) {
    $firstrun = false;
    for( $i = 0; $i < count( $row ); $i++ ) {
      $arrayOfRows[$i] = Array();
    }
  }

  #Each field in this mysql row needs to be in a different html row
  foreach( $row as $k => $v ) {
    $arrayOfRows[$k][] = $v;
  }
}

#Now simply print it
echo '<table>';

foreach( $arrayOfRows as $k => $row ) {
  echo '<tr>';
  echo '<td>' . implode( '</td><td>', $row ) . '</td>';
  echo '</tr>';
}

echo '</table>';
于 2013-07-12T08:14:37.777 回答
-1
<?php 

$arr = array(array(1,2,3,4,5,6,7,8,9), array(10,11 etc . . .

for($i = 0; $i < 9; ++ $i){

    for($x = 0; $x < $num_rows; ++ $x){

         echo $arr[$x][$i];

    }
    echo '<br/>';

}

?>

U 可以用表中的列数替换 9

我不确定这段代码的正确性(现在无法测试),但我认为它可以帮助你对不起,如果我做错了什么,我只是想帮忙

于 2013-07-12T06:23:15.403 回答