2012-01-13 6 views
5

Ho un problema con il set di risultati mysqli. Ho una tabella che contiene un sacco di messaggi. Ogni riga della tabella rappresenta un messaggio. Ho alcune colonne come ID, titolo, corpo e "pubblico". La colonna pubblica contiene booleani, che specificano se il messaggio deve essere mostrato a tutti, o solo alla persona che lo ha pubblicato. Ho una pagina in cui voglio visualizzare tutti i messaggi pubblici e, se fai clic su un messaggio, ottieni una pagina con il singolo messaggio e alcune opzioni extra. Per fare questo, voglio caricare il risultato di una query mysqli in una matrice bidimensionale. Ciò significherebbe una serie di messaggi e ogni messaggio è una matrice su se stesso con ID, titolo, corpo ecc. Come colonne.Come caricare il set di risultati MySQLi in un array bidimensionale?

Così ho iniziato con il seguente codice. La variabile '$ link' contiene la connessione mysqli (la strega funziona bene).

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

print_r($array); 

Questo risulta solo in una matrice monodimensionale, con il messaggio più recente. Così ho provato il seguente ciclo while:

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

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

Questo funziona in un modo: Visualizza tutti i messaggi, ma non li mette in un array (strega che voglio per l'esecuzione di attività sulla base di ID, e la posizione del array di messaggi nell'array di contenimento. Qualcuno sa come convertire questo tipo di risultato di una query in una bella matrice bidimensionale? O un modo totalmente diverso e elegante di fare questo? Grazie in anticipo.

PS. Scusa per il mio inglese, non sono madrelingua.

risposta

15

Sei quasi arrivati, si avrebbe solo bisogno di cambiare alcune cose:

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

questo si tradurrebbe in qualcosa di simile:

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

Se si desidera che gli ID delle chiavi , fare qualcosa di simile:

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

che si tradurrebbe in:

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

In PHP 5.3, si ottiene anche un nuovo metodo, che fa lo stesso del primo esempio di codice che ho postato:

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

Grazie per questa risposta! mi ha aiutato molto! –

+0

Gli esempi hanno funzionato, ma potrebbero essere più chiari se si utilizzassero nomi di variabili diversi da più di un carattere ... ** $ messaggio ** e ** $ messaggi ** –

0

Se ti prendo a destra, si vuole raggiungere qualcosa che è prodotto da:

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

questo modo si ottiene una matrice bidimensionale 2, utilizzando l'ID come chiave.

+0

Penso che avrete bisogno di cambiare '[$ singleMessage]' '[$ singleMessage [ 'id']]', in caso contrario, PHP avrebbe usato per l'intero array come chiave ... (Che potrebbe effettivamente funzionare!) – RikkusRukkus

-1

Come l'array finale deve assomigliare?

Prova questo:

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