我正在尝试使用数据库表中的信息填充网格。我设法使用暴力和mysql实现这一点,但是我想以更优雅的方式实现它,因为我正在将代码升级到mysqli。 这是我想要的输出:
|--------------------|--------------------| |col0row0 title |col1row0 title | |col0row0 author |col1row0 author | |col0row0 email |col1row0 email | |-----------------------------------------| |col0row1 title |col1row1 title | |col0row1 author |col1row1 author | |col0row1 email |col1row1 email | |-----------------------------------------| | and so on for subsequent rows
我过去使用非常难看的代码设法做到了这一点:
for($x=0;$x<$numberSides;$x++) {
for ($y=0;$y<$numberRows;$y++) {
$queryString[$x][$y] = "SELECT * from comments WHERE topic_id = '1' AND col = '{$x}' AND row = '{$y}' ";
}
}
$col0Row0_mysqlQuery = mysql_query($queryString[0][0] , $commenting_conn) or die(mysql_error());
$col0Row1_mysqlQuery = mysql_query($queryString[0][1] , $commenting_conn) or die(mysql_error());
$col0Row2_mysqlQuery = mysql_query($queryString[0][2] , $commenting_conn) or die(mysql_error());
$col1Row0_mysqlQuery = mysql_query($queryString[1][0] , $commenting_conn) or die(mysql_error());
$col1Row1_mysqlQuery = mysql_query($queryString[1][1] , $commenting_conn) or die(mysql_error());
$col1Row2_mysqlQuery = mysql_query($queryString[1][2] , $commenting_conn) or die(mysql_error());
// load those into output arrays
$col0Row0_output = mysql_fetch_assoc($col0Row0_mysqlQuery);
$col0Row1_output = mysql_fetch_assoc($col0Row1_mysqlQuery);
$col0Row2_output = mysql_fetch_assoc($col0Row2_mysqlQuery);
$col1Row0_output = mysql_fetch_assoc($col1Row0_mysqlQuery);
$col1Row1_output = mysql_fetch_assoc($col1Row1_mysqlQuery);
$col1Row2_output = mysql_fetch_assoc($col1Row2_mysqlQuery);
然后我会为网格中的每个字段回显col0row0_output ['title'],col0row0_output ['author']等,以获得我想要的输出。这不是编写代码的有效方法,但我是初学者,所以我做了我必须使其适用于演示。
我的表中的每个注释都包含一个列和一个行字段,所以我想将它直接转换为网格。进一步解释:每个网格方块可能有多个注释。所以记录看起来像这样:
Table fields: "title" / "author" / "email" / "row" / "col"
Record 0: TitleA /AuthorA /EmailA /0 /0
Record 1: TitleB /AuthorB /EmailB /1 /0
Record 2: TitleC /AuthorC /EmailC /0 /1
Record 3: TitleD /AuthorA /EmailA /1 /1
Record 4: TitleE /AuthorB /EmailB /0 /0
因此,记录0和记录4都在网格方块0,0中。 我现在正试图转向循环和3D数组以使其工作。我希望能够创建3D数组,使得我的echo命令类似于输出[0] [0] ['title'],用于col0row0的标题字段,输出[1] [0] ['author' ]对于col1row0。
我也正在远离mysql并将其替换为mysqli。(PDO对我来说有点过于先进,但如果人们认为PDO有最好的解决方案,我想我可以从你的回复中学习。)
例如,我可以创建一个将SQL结果存储为数组的循环吗?例如:
for($x=0;$x<$numberSides;$x++) {
for ($y=0;$y<$numberRows;$y++) {
$queryString[$x][$y] = "SELECT * from comments WHERE topic_id = '1' AND col = '{$x}' AND row = '{$y}' ";
$sqlResult[$x][$y] = mysqli_query($connection, $queryString[$x][$y]);
$resultArray[$x][$y] = mysqli_fetch_assoc($sqlResult[$x][$y]);
}
}
那会有用吗?是否有一种优雅的方式来实现我希望做的事情?我很感激任何指导。谢谢!
答案 0 :(得分:1)
表格强>
CREATE TABLE `comments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(128) DEFAULT NULL,
`author` varchar(128) DEFAULT NULL,
`email` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
<强> PHP:强>
<?php
// PDO
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$statement = $pdo->query("SELECT * from comments");
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$columns = 2;
//make two dimensional array
$multiArray = Array();
$row = Array();
$cellNumber = 1;
foreach ($results as $result) {
$row[] = $result;
if (0 == ($cellNumber % $columns)) {
$multiArray[] = $row;
$row = Array();
}
$cellNumber++;
}
var_dump($multiArray);
但您可以将数据存储在平台中并以行和列的形式显示。
答案 1 :(得分:0)
想出来:
for($x=0;$x<$numberSides;$x++) {
for ($y=0;$y<$numberRows;$y++) {
$queryString[$x][$y] = "SELECT * FROM comments WHERE topic_id = '{$topicid}' AND side = '{$x}' AND row = '{$y}'";
$result[$x][$y] = mysqli_query($db_connection,$queryString[$x][$y]) or die(mysqli_error($db_connection));
while($eachcomment = mysqli_fetch_assoc($result[$x][$y])) {
$array[$x][$y][] = $eachcomment;
}
}
}
FTW。 :)