如何将 MySQLi 结果集加载到二维数组中?

Posted

技术标签:

【中文标题】如何将 MySQLi 结果集加载到二维数组中?【英文标题】:How to load MySQLi result set into two-dimensional array? 【发布时间】:2012-02-09 13:48:53 【问题描述】:

我的 mysqli 结果集有问题。我有一个包含一堆消息的表。每个表格行代表一条消息。我有几列,如 ID、标题、正文和“公共”。公共列包含布尔值,指定消息是显示给所有人,还是只显示给发布它的人。我有一个页面,我想在其中显示所有公共消息,如果您单击一条消息,您将获得一个包含单个消息和一些额外选项的页面。为此,我想将 mysqli 查询的结果加载到二维数组中。这意味着一组消息,每条消息本身都是一个数组,以 ID、标题、正文等为列。

所以我从以下代码开始。 '$link' 变量包含 mysqli 连接(witch 工作正常)。

$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。对不起我的英语,我不是母语人士。

【问题讨论】:

【参考方案1】:

您的最终数组必须是什么样子?

试试这个:

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

【讨论】:

【参考方案2】:

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

$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);

【讨论】:

感谢您的回答!帮了我很多! 您的示例有效,但如果您使用的变量名称相差不止一个字符,则可能会更清楚... $message$messages 【参考方案3】:

如果我说得对,您希望实现以下目标:

$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'];

这将为您提供一个二维数组,使用 ID 作为键。

【讨论】:

我认为您需要将[$singleMessage] 更改为[$singleMessage['id']],否则,PHP 将使用整个数组作为键...(这实际上可能有效!)

以上是关于如何将 MySQLi 结果集加载到二维数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Excel 中显示来自 Access 的二维数组记录集?

如何将结果集行作为索引子数组添加到结果数组中?

我们如何将 TXT 文件中的板加载到二维数组中(没有 rowSize 和 columnSize)

如何表示二维数组中的图像集?

将对象数组的对象数组转换为对象的二维数组

mysqli结果foreach结果集转换为数组