2012-01-13 168 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)) {}