循环以垂直填充html表

时间:2013-07-12 06:13:48

标签: php html mysql

我有一个返回行数组的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>" ;

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

7 个答案:

答案 0 :(得分:4)

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

转置数组是一个已解决的问题(transposing multidimentional arrays in 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>';

?>

答案 1 :(得分:0)

您在while循环中只分配了一行。使用以下代码更改:

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

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

答案 2 :(得分: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解释器。

答案 3 :(得分:0)

您可以在一个循环中完成所有操作。另外,至少在你的例子中,我不明白为什么你把所有东西都放在一个数组然后回声,而不是直接回应它。

e.g。 (的测试):

$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>";

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

此代码对您有帮助吗?

答案 4 :(得分: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>" ;
}

答案 5 :(得分:0)

这就是我要解决的问题。最困难的部分是准备你准备桌子的结构。它使用以下语法:$somearray[] = $x,它将$x附加到数组$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>';

答案 6 :(得分:-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

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