[英]How to load MySQLi result set into two-dimensional array?
我遇到了mysqli结果集的问题。 我有一个包含大量消息的表。 每个表行代表一条消息。 我有一些列,如ID,标题,正文和'公共'。 公共列包含布尔值,用于指定是向所有人显示消息,还是仅向发布消息的人显示消息。 我有一个页面,我想显示所有公共消息,如果您单击一条消息,您将获得一个包含单个消息的页面,以及一些额外的选项。 为此,我想将mysqli查询的结果加载到二维数组中。 这意味着一组消息,每条消息都是一个数组本身,ID,标题,正文等作为列。
所以我开始使用以下代码。 '$ 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。 对不起我的英语,我不是母语人士。
你几乎就在那里,你只需要改变一些事情:
$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);
如果我找到了你,你想要实现以下产生的东西:
$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作为键来获得二维数组。
你的最终阵列必须如何?
试试这个:
$result = $link->query("SELECT title, body FROM messages WHERE public = '1'");
$array = array();
while ($array[] = mysql_fetch_assoc($result)) {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.