[英]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.