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

Ste*_*gen 5 php arrays mysqli resultset

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

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

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

print_r($array);
Run Code Online (Sandbox Code Playgroud)

这只会产生一维数组,其中包含最新消息.所以我尝试了以下while循环:

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

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

这在某种程度上起作用:它显示所有消息,但不会将它们放在一个数组中(我想要根据ID执行任务,以及消息数组在包含数组中的位置.)有谁知道如何转换这个那种查询结果变成了一个漂亮的二维数组?还是一个完全不同的,漂亮的方式来解决这个问题?提前致谢.

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

Rik*_*kus 15

你几乎就在那里,你只需要改变一些事情:

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

这将导致类似这样的事情:

array(
  0 => array('message' => ..., 'subject' => ...), 
  1 => array('message' => ..., 'subject' => ...), 
  2 => array('message' => ..., 'subject' => ...), 
);
Run Code Online (Sandbox Code Playgroud)

如果您想将ID作为键,请执行以下操作:

$messages = array();
while($message = $result->fetch_assoc()){
   $messages[ $message["id"] ] = $message;
}
Run Code Online (Sandbox Code Playgroud)

这将导致:

array(
  123 => array('message' => ..., 'subject' => ...), 
  456 => array('message' => ..., 'subject' => ...), 
  789 => array('message' => ..., 'subject' => ...), 
);
Run Code Online (Sandbox Code Playgroud)

在PHP 5.3中,您还获得了一个新方法,它与我发布的第一个代码示例相同:

$messages = $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)