我不清楚如何构造一个多维数组来创建一个简单的数据网格框架。 我有许多类方法,其中包含来自MySQL表的crud select语句,格式如下:
<?php
function table1()
{
$sql = "SELECT * FROM `table1`";
$result = mysqli_query ($link, $sql);
$html = "<table>";
while ($row = mysqli_fetch_array( $result ))
{
$html .= "<tr><td>".$row['field_a']."</td><td>".$row['field_b']."</td></tr>";
}
$html .= "</table>";
return $html;
}
function table2()
{
$sql = "SELECT * FROM `table2`";
$result_properties = mysqli_query ($link, $sql);
$html = "<table>";
while ($row = mysqli_fetch_array( $result ))
{
$html .= "<tr><td>".$row['field_x']."</td><td>".$row['field_y']."</td></tr>";
}
$html .= "</table>";
return $html;
}
?>
其中 MySQL 表如下所示:
表1
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | bigint(12) | NO | PRI | NULL | auto_increment |
| field_a | varchar(128) | NO | | NULL | |
| field_b | varchar(128) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
表2
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | bigint(12) | NO | PRI | NULL | auto_increment |
| field_x | varchar(128) | NO | | NULL | |
| field_y | varchar(128) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
我正在尝试用单个 datagrid 方法替换所有这些方法,从两个摘要网格表中选择有关每个单独表的信息 - 一个包含每个表的属性(表名称和该表的 select sql 语句),另一个包含每个单独表的字段名称和标题:
grid_properties
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | bigint(12) | NO | PRI | NULL | auto_increment |
| table | varchar(128) | NO | | NULL | |
| select_sql | varchar(128) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
grid_fields
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id | bigint(12) | NO | PRI | NULL | auto_increment |
| grid_properties_id | bigint(12) | NO | | NULL | |
| heading | varchar(128) | NO | | NULL | |
| field | varchar(128) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
grid_fields
中的数据。field
列只是 grid_properties
中引用的表的字段名称。table
,通过grid_properties
相关。id
:: grid_fields
.grid_properties_id
.
我用来构造数据网格的方法在最后一个 while 循环中有一个多维数组,它有问题。 构建它的正确方法是什么?
<?php
function grid_schema($table)
{
// Get information about $table from the grid_properties table
$sql = "SELECT * FROM `grid_properties` WHERE `table` LIKE '".$table."'";
$result_properties = mysqli_query ($link, $sql);
$properties = mysqli_fetch_array ($result1);
$properties_sql = $properties['select_sql'];
$id = $properties['id'];
// Get information about the grid field names
$fields_sql = "SELECT * FROM `grid_fields` WHERE `grid_properties_id` ='".$id."'";
$fields_result = mysqli_query ($link, $fields_sql);
// Display the Table Headings
$html = "<table><tr>";
while ($fields_row = mysqli_fetch_array ( $fields_result ))
{ $html .= "<th>".$fields_row['heading']."</th>"; }
$html .= "</tr>";
// Perform the SQL query from the grid_properties table
$properties_result = mysqli_query ($link, $properties_sql);
while ($properties_row = mysqli_fetch_array ($properties_result))
{
// Print out the contents of each row
$html .= "<tr>";
while ($fields_row = mysqli_fetch_array( $fields_result ))
{
// This is where I am having problems
$html .= "<td>".$properties_row[$fields_row]['field']."</td>";
}
}
$html .= "</table>";
return $html;
}
?>
<?php
function grid_schema($table)
{
$link = mysqli_connect("localhost", "root", "", "test");
// Get information about $table from the grid_properties table
$sql = "SELECT * FROM `grid_properties` WHERE `table` LIKE '".$table."'";
$result_properties = mysqli_query ($link, $sql);
$properties = mysqli_fetch_array ($result_properties, MYSQLI_ASSOC);
$properties_sql = $properties['select_sql'];
$id = $properties['id'];
// Get information about the grid field names
$fields_sql = "SELECT * FROM `grid_fields` WHERE `grid_properties_id` ='".$id."'";
$fields_result = mysqli_query ($link, $fields_sql);
// Display the Table Headings
$html = "<table><tr>";
$rows = array();
while ($fields_row = mysqli_fetch_array ( $fields_result, MYSQLI_ASSOC ))
{
$rows[] = $fields_row['field'];
$html .= "<th>".$fields_row['heading']."</th>";
}
$html .= "</tr>";
// Perform the SQL query from the grid_properties table
$properties_result = mysqli_query ($link, $properties_sql);
while ($properties_row = mysqli_fetch_array ($properties_result, MYSQLI_ASSOC))
{
// Print out the contents of each row
$html .= "<tr>";
foreach($rows as $row)
{
// This is where I am having problems
$html .= "<td>".$properties_row[$row]."</td>";
}
}
$html .= "</table>";
return $html;
}
echo grid_schema('table1');