2012-01-13 164 views
5

我遇到了mysqli结果集的问题。我有一个包含一堆消息的表格。每个表格行代表一条消息。我有几列像ID,标题,正文和'公开'。公共列包含布尔值,指定消息是要显示给每个人,还是只显示给发布者。我有一个页面,我想要显示所有公共消息,并且如果您单击某条消息,就会得到一个包含单条消息的页面以及一些额外的选项。为此,我想将mysqli查询的结果加载到二维数组中。这意味着一个消息数组,每个消息是一个数组本身与ID,标题,身体等..作为列。如何将MySQLi结果集加载到二维数组中?

所以我开始用下面的代码。 '$ link'变量包含mysqli连接(女巫工作正常)。

$result = $link->query("SELECT * FROM messages WHERE public = '1'"); 
$array = $result->fetch_assoc(); 

print_r($array); 

这只会产生一维数组,其中包含最新消息。所以,我想下面的while循环:

$result = $link->query("SELECT * FROM messages WHERE public = '1'"); 

while($message = $result->fetch_assoc()){ 
$title = $message['title']; 
$body = $message['body']; 
# etc... 
} 

这工作的方式:它会显示所有消息,但不把它们放在一个数组(巫婆我想基于ID执行任务,并且的位置包含数组中的消息数组)。有谁知道如何将这种查询结果转换为一个漂亮的二维数组?或者完全不同的,漂亮的方式来解决这个问题?提前致谢。

PS。对不起,我的英语,我不是母语的人。

回答

15

就快,你只需要改变一些东西:

$result = $link->query("SELECT * FROM messages WHERE public = '1'"); 
$messages = array(); 
while($message = $result->fetch_assoc()){ 
    $messages[] = $message; 
} 

这将导致这样的事情:

array(
    0 => array('message' => ..., 'subject' => ...), 
    1 => array('message' => ..., 'subject' => ...), 
    2 => array('message' => ..., 'subject' => ...), 
); 

如果你想要的ID作为关键字,做这样的事情:

$messages = array(); 
while($message = $result->fetch_assoc()){ 
    $messages[ $message["id"] ] = $message; 
} 

这将导致:

array(
    123 => array('message' => ..., 'subject' => ...), 
    456 => array('message' => ..., 'subject' => ...), 
    789 => array('message' => ..., 'subject' => ...), 
); 

在PHP 5.3中,你还可以得到一个新的方法,它不一样的第一个代码示例我张贴:

$messages = $result->fetch_all(MYSQLI_ASSOC); 
+0

谢谢你的回答!帮了我很多! – 2012-01-13 11:08:57

+0

您的示例可行,但如果您使用的变量名称与多个字符不同,则可能会更清晰...... ** $ message **和** $ messages ** – 2014-09-05 15:04:51

0

如果我得到你的权利,你想实现的东西,是由生产:

$result = $link->query("SELECT * FROM messages WHERE public = '1'"); 

$messages = array(); 
while($singleMessage = $result->fetch_assoc()){ 
    $messages[$singleMessage]['title'] = $singleMessage['title']; 
    $messages[$singleMessage]['body'] = $singleMessage['body']; 
} 

这将让你一个2维数组,使用ID为关键。

+0

我想你会需要改变'[$ singleMessage]''到[$ singleMessage [ '身份证']',否则,PHP将使用整个数组作为关键...(其实可能有效!) – RikkusRukkus 2012-01-13 10:50:21

-1

如何最终数组必须是什么样子?

试试这个:

$result = $link->query("SELECT title, body FROM messages WHERE public = '1'"); 
$array = array(); 
while ($array[] = mysql_fetch_assoc($result)) {}