2012-01-13 5 views
5

Tengo un problema con el conjunto de resultados mysqli. Tengo una tabla que contiene un montón de mensajes. Cada fila de la tabla representa un mensaje. Tengo algunas columnas como ID, título, cuerpo y 'público'. La columna pública contiene booleanos, que especifican si el mensaje debe mostrarse a todos, o solo a la persona que lo publicó. Tengo una página donde quiero mostrar todos los mensajes públicos, y si haces clic en un mensaje, obtienes una página con el mensaje único y algunas opciones adicionales. Para hacer esto, quiero cargar el resultado de una consulta mysqli en una matriz bidimensional. Eso significaría una matriz de mensajes, y cada mensaje es una matriz en sí misma con la ID, el título, el cuerpo, etc. como columnas.¿Cómo cargar el conjunto de resultados MySQLi en una matriz bidimensional?

Así que comencé con el siguiente código. La variable '$ link' contiene la conexión mysqli (la bruja funciona bien).

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

print_r($array); 

Esto sólo da lugar a una matriz unidimensional, con el último mensaje en él. Así que probé el siguiente bucle while:

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

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

Esto funciona de una manera: Muestra todos los mensajes, pero no las pone en una matriz (bruja que quiero para la realización de tareas basado en ID, y la posición de la matriz de mensajes en la matriz que contiene.) ¿Alguien sabe cómo convertir este tipo de resultados de la consulta en una buena matriz bidimensional? ¿O una forma totalmente diferente e ingeniosa de hacer esto? Gracias por adelantado.

PS. Perdón por mi inglés, no soy un hablante nativo.

Respuesta

15

Ya casi ha terminado, sólo se tendría que cambiar algunas cosas:

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

Esto daría lugar a algo como esto:

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

Si desea que los identificadores como las teclas , hacer algo como esto:

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

lo que resultaría en:

array(
    123 => array('message' => ..., 'subject' => ...), 
    456 => array('message' => ..., 'subject' => ...), 
    789 => array('message' => ..., 'subject' => ...), 
); 

En PHP 5.3, también puede obtener un nuevo método, que hace lo mismo que el primer ejemplo de código que he publicado:

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

¡Gracias por esta respuesta! ¡me ayudo mucho! –

+0

Sus ejemplos funcionaron, pero podrían ser más claros si utiliza nombres de variables que difieren en más de un carácter ... ** $ mensaje ** y ** $ mensajes ** –

0

si consigo que la derecha, que quiere lograr algo que se produce por:

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

Esto le dará una matriz de 2 dimensiones, utilizando el ID como clave.

+0

Creo que tendrá que cambiar '[$ singleMessage]' 'a [$ singleMessage [ 'id']]', por lo demás, PHP usaría toda la matriz como una clave ... (¡Lo cual podría funcionar realmente!) – RikkusRukkus

-1

Cómo la matriz final debe ser similar?

Prueba esto:

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