2014-03-12 53 views
0

我想用php構建一個矩陣類型的表。 MySQL的表結構如下。Mysql&PHP:動態顯示矩陣表

表:座位

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

等行和列的n個會和名字也將是不同的像A1,A2,B2,B3

我只是想顯示它像下面

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

等。

如何顯示像上面?

回答

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; 
0

使用查詢:

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

然後處理在一個循環的結果。只要rows值發生更改,請在HTML表格中啓動一個新的<tr>

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訪存陣列將在以下鏈接中進行更詳細的討論:http://us2.php.net/mysqli_fetch_array

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

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