我有一个返回行数组的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>" ;
知道我做错了什么吗?或者如何使它更简单? (我认为循环太多了)
答案 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
附加到数组$somearray
。 implode()
将数组与您定义的字符串连接在一起。最后但同样重要的是,您使用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
我不知道这段代码的正确性(现在无法测试),但我认为它可以帮到你 对不起,如果我做错了什么,我只是尝试帮助