2012-04-18 14 views
7

Quiero crear una matriz de matrices asociativas en un ciclo while. En cada iteración del ciclo while, quiero agregar un nuevo elemento en la matriz. ¿Como puedo hacer eso? Después de eso quiero pasar esta matriz en un foreach e imprimir los datos. Tengo esta parte del código por ahora, pero obviamente algo anda mal con eso.crear una matriz de matrices asociativas en PHP

while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 
          } 
+0

Tengo dos matrices y quiero ponerlas en una variable. Estoy usando esta línea de código $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Pero me devuelve un error fatal. ¿Me puedes ayudar? – anna

+0

Lo he solucionado usando array_merge(). – anna

Respuesta

16

Para añadir una elemento al final de una matriz use []
Ejemplo:

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 
+0

¡Gracias! Estaba haciendo cambios y olvidé poner esto de nuevo. – anna

+0

Tengo dos matrices y quiero ponerlas en una variable. Estoy usando esta línea de código $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Pero me devuelve un error fatal. ¿Me puedes ayudar? – anna

+0

no puede agregar dos matrices. usa el código de arriba aquí está el resultado: $ finalarray = array(); $ finalarray [] = $ _SESSION ['SESS_ARRAY']; $ finalarray [] = $ myarray; – laltin

1

Obviamente su acceso a $row2 miraron mal, lo que supone que para ser justo

$myarray = array(); 
while($row2 = mysql_fetch_array($result)) { 
    // append something to your array with square brackets [] 
    $myarray[] = array("id"=> $row2['id'], "name" => $row2['name'], "text"=>$row2['text']); 


    // or to maker this even shorter you could do 
    $myarray[] = $row2; // ... because it has the same array key names 
} 

Luego, más tarde cuando se desea leer de él:

foreach($myarray as $val) { 
    echo $val['name'].' (ID: '.$val['id'].') wrote following text: '.$val['text']; 
} 
3

Si usted está tratando de añadir a $ myarray en cada iteración, lo hacen así:

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 

o como esto:

array_push($myarray, array("id"=>$theid, "name"=>name($id), "text"=>$row2[text])); 
6

Obviamente, está bien, la primera selección lo diferencia así que hay algo para aprender:

while($row2 = mysql_fetch_array($result)) 
{ 
    ... 
} 

está bien este aspecto parte, vamos a ver el interior del bucle:

$myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 

Hay varios puntos. Probablemente lo más importante es que, como está dentro de un ciclo, sobrescribe $myarray en cada iteración. Desea agregar a una matriz en su lugar. Vamos a hacer esto:

$myarray = array(); # initialize the array first! 
while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray[] = $row2; # add the row 
} 

Después de que se puede dar salida a una prueba de que funciona básicamente:

var_dump($myarray); 

que le muestra una matriz que contiene todas las filas. . A continuación, sólo tiene que cambiar la consulta de base de datos para que sólo devuelve los campos que le interesan

En caso de que no se puede hacer eso con la base de datos, se puede manipular la matriz, así:

$myarray = array(); # initialize the array first! 
while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray[] = array(
     "id" => $theid, 
     "name" => name($id), 
     "text" => $row2['text'] 
    ); 
} 
var_dump($myarray); 

Ahora el resultado debería verse como lo desea. Para la salida $myarray:

foreach ($myarray as $number => $row) 
{ 
    echo '<div>Number ', $number, ':<dl>'; 
    foreach ($row as $k => $v) 
    { 
     printf("<dt>%s</dt><dd>%s</dd>\n", $k, htmlspecialchars($v)); 
    } 
    echo '</dl></div>' 
} 
Cuestiones relacionadas