Mysql& PHP:动态显示矩阵表

时间:2014-03-12 06:32:36

标签: php mysql

我试图使用PHP构建矩阵类表。 MySQL的表结构如下:

表:席位

id rows columns value
1  r1    c1      1
2  r2    c2      2
3  r3    c3      3

等..行数和列数将有所不同,名称也会有所不同,如a1,a2,b2,b3

我只想在下面显示它:

    c1   c2  c3
r1  1    0   0
r2  0    2   0
r3  0    0   3

等。

我如何显示如上?

5 个答案:

答案 0 :(得分:1)

这里的想法是将表格数组转换为二维矩阵,第一列和第二列是"键"对于二维矩阵。

现在假设您已经使用SQL从表中获取了数组 以下三个步骤将起到魔力:

1)使用表格数列中的键初始化二维矩阵。

    // Initializing the two dimensional matrix with zeros
function initialize_2d($m, $value = 0) {
    $result = array();
    for ($i=1; $i <= $m ; $i++) {
        for ($j=1; $j <= $m ; $j++) { 
            $result['r'.$i]['c'.$j] = 0;
         }
    }
    return $result;
}

2)将对应值分配给矩阵

    // Assign values from Table Structure to Two Dimensional Matrix
function convert_2d($m_arr){
    $matrix_arr = initialize_2d(sizeof($m_arr));
    foreach($m_arr as $sub_arr)
    {
        $matrix_arr[$sub_arr[0]][$sub_arr[1]] = $sub_arr[2];
    }
    return $matrix_arr;
}

3)打印矩阵

    // Prints the 2D Matrix
function print_2d($matrix_arr){
    $table_html = '';
    $table_html .= '<table>
                    <tr><td></td>';
    foreach ($matrix_arr as $matrix_subarr) {
        foreach ($matrix_subarr as $key => $value) {
            $table_html .= '<td>'.$key.'</td>';
        }
        break;
    }
    foreach ($matrix_arr as $key => $matrix_subarr) {
        $table_html .= '<tr>
                    <td>'.$key.'</td>';
        foreach ($matrix_subarr as $value) {
        $table_html .='<td>'.$value.'</td>';
        }
        $table_html .=  '</tr>';
    }
    $table_html .= '</table>';
    return $table_html;
}

使用以下测试代码测试上述功能:

    // Array from Table
    $m_arr = array(array("r1","c1","1"),array("r2","c2","2"),array("r3","c3","3"));

    $matrix_arr = convert_2d($m_arr);
    $table_html = print_2d($matrix_arr);

    echo $table_html;

答案 1 :(得分:0)

使用查询:

SELECT rows, columns, value
FROM yourTable
ORDER BY rows, columns

然后循环处理结果。每当rows值更改时,请在HTML表格中开始新的<tr>

答案 2 :(得分:0)

要添加Barmar的响应,最简单的方法是将数据库查询的结果视为数组,例如:

$sql = "Select * from yourtable order by rows, columns";
$results = mysqli->query($sql);

While ($row = $results-> fetch_array()){
   $rows[]=$row;
}

Foreach ( $rows as $row){
    $row['rows'];
    $row['columns'];
}

您需要修改foreach循环以添加您要查找的HTML。另外,mysqli fetch数组将在以下链接中详细讨论:http://us2.php.net/mysqli_fetch_array

答案 3 :(得分:0)

您可以循环播放数据库中的项目。 对于您制作td的每个项目,以及为每行创建一个tr

例如

<?php

echo "<Table>";
echo    "<tr>";
echo       "<td></td>";
echo       "<td>C1</td>";
echo       "<td>C2</td>";
echo       "<td>C3</td>";
echo    "</tr>";
echo    "<tr>";
echo       "<td>r1</td>";
echo       "<td>1</td>";
echo       "<td>0</td>";
echo       "<td>0</td>";
echo    "</tr>";
echo    "<tr>";
echo       "<td>r2</td>";
echo       "<td>0</td>";
echo       "<td>2</td>";
echo       "<td>0</td>";
echo    "</tr>";
echo    "<tr>";
echo       "<td>r3</td>";
echo       "<td>0</td>";
echo       "<td>0</td>";
echo       "<td>3</td>";
echo    "</tr>";
echo "</table>";
?>

您可以从变量或类似这样的mysql文本加载文本而不是文本

<php?
 //everything is the same but here is an example of a <td>

$test = "hello world";
echo "<td>".$text."</td>";

?>

答案 4 :(得分:-1)

<?php
function matrics($int){
    $j = $int*$int;
    for($i=1;$i<=$j;$i++) {
        echo $i.' ';
        if($i%$int==0)
        echo '<br/>';
    }
}
matrics(4);
?>