Как загрузить набор результатов MySQLi в двумерный массив?

У меня проблема с набором результатов 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... } 

Это работает в некотором роде: он отображает все сообщения, но не помещает их в массив (ведь я хочу выполнять задания на основе идентификатора и позицию массива сообщений в содержащем массиве.) Кто-нибудь знает, как преобразовать этот вид результата запроса в хороший двумерный массив? Или совсем другой, отличный способ сделать это? Заранее спасибо.

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' => ...), ); 

    Если вам нужны идентификаторы в качестве ключей, выполните следующие действия:

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

    Это даст вам 2-мерный массив, используя идентификатор в качестве ключа.

    Как должен выглядеть ваш последний массив?

    Попробуй это:

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