2012-01-13 7 views
5

mysqli結果セットに問題があります。私にはたくさんのメッセージが入っているテーブルがあります。すべての表の行は1つのメッセージを表します。 ID、タイトル、本文、「公開」などのいくつかの列があります。パブリックカラムには、メッセージを誰にでも表示するか、投稿した人だけに表示するかを指定するブール値が含まれています。私はすべてのパブリックメッセージを表示するページを持っています。メッセージをクリックすると、単一のメッセージといくつかの追加オプションがあるページが表示されます。これを行うには、mysqliクエリの結果を2次元配列にロードします。それはメッセージの配列を意味し、各メッセージはID、タイトル、本文などを列として持つ配列です。2次元配列にMySQLi結果セットをロードするには?

私は次のコードを使い始めました。 '$ link'変数にはmysqli接続が含まれています(魔女はうまくいきます)。

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

print_r($array); 

これは、最新のメッセージを含む1次元配列になります。ループしながら、だから私は、次のことを試してみました:それはすべてのメッセージを表示しますが、私はIDに基づいてタスクを実行するために必要配列(魔女、との位置に入れていません:

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

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

これは、ように動作しますメッセージ配列を含む配列)。誰もこのようなクエリ結果を素敵な2次元配列に変換する方法を知っていますか?これについては、まったく違う、気の利いた方法ですか?前もって感謝します。

PS。私の英語は申し訳ありませんが、私はネイティブスピーカーではありません。私は右のあなたを取得する場合

答えて

15

あなたはほとんどそこにいる、あなただけのいくつかのことを変更する必要があります:

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

これは、このようなものになるでしょう:あなたがキーとしてIDが必要な場合

array(
    0 => array('message' => ..., 'subject' => ...), 
    1 => array('message' => ..., 'subject' => ...), 
    2 => array('message' => ..., 'subject' => ...), 
); 

$messages = array(); 
while($message = $result->fetch_assoc()){ 
    $messages[ $message["id"] ] = $message; 
} 

につながる:

、このような何かを行いますPHP 5.3では
array(
    123 => array('message' => ..., 'subject' => ...), 
    456 => array('message' => ..., 'subject' => ...), 
    789 => array('message' => ..., 'subject' => ...), 
); 

最初のコード例と同じ処理を行い、新たな方法を、取得、あなたも私が掲示:

$messages = $result->fetch_all(MYSQLI_ASSOC); 
+0

この回答ありがとう!私を助けてくれました! –

+0

あなたの例はうまくいきましたが、複数の文字が異なる変数名を使用するともっと明確になります... ** $ message **と** $ messages ** –

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

これは、キーとしてIDを使用して、あなたの2次元配列を取得します。

+0

をキー...(実際に動作するかもしれません!) – RikkusRukkus

-1

を最終的な配列は次のように見なければならない方法は?

この試してみてください。そうでない場合は、PHPのように配列全体を使用することになり、[$ singleMessage] `へ` [$ singleMessage [ 'ID']] ``私はあなたが変更する必要があると思う

$result = $link->query("SELECT title, body FROM messages WHERE public = '1'"); 
$array = array(); 
while ($array[] = mysql_fetch_assoc($result)) {} 
関連する問題