Foros del Web » Programando para Internet » PHP »

Array asociativo desde consulta

Estas en el tema de Array asociativo desde consulta en el foro de PHP en Foros del Web. Hola estoy realizando la siguiente consulta: Código: select tema, subtema from tabla y al obtener los resultados pretendo crear un array asociativo de este modo: ...
  #1 (permalink)  
Antiguo 23/02/2013, 14:49
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Array asociativo desde consulta

Hola estoy realizando la siguiente consulta:
Código:
select tema, subtema from tabla
y al obtener los resultados pretendo crear un array asociativo de este modo:
Código:
while ($row = mysql_fetch_array($result)) {
$temas_assoc[$row['tema']] = array($row['subtema']);
}
de manera que cada indice del array sea a su vez un array.
Haciendo un print_r del array me muestra lo siguiente:
Código:
Array ( [3] => Array ( [0] => 7 ) [4] => Array ( [0] => 7 ) [1] => Array ( [0] => 4 ) [2] => Array ( [0] => 7 ) )
guardando únicamente el último valor que se le pasa al índice. ¿Cual puede ser el problema?
__________________
Diseño Web profesional y creativo: WebSystem.
  #2 (permalink)  
Antiguo 23/02/2013, 14:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array asociativo desde consulta

Cita:
¿Cual puede ser el problema?
El problema es que ni si quiera entendemos lo que buscas, sólo vemos código y ya.

¿Puedes mostrar cual sería la estructura ideal que estás buscando?

Es que leer la mente de las personas es complicado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/02/2013, 15:03
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Array asociativo desde consulta

Ok, disculpas, tengo una tabla con varias columnas. Dos de ellas son tema y subtema. Cada una contiene una lista de ids, de esta forma:

tema | subtema
-----------------------
1 | 3
3 | 7
4 | 6
2 | 7
1 | 2
1 | 4
4 | 6
3 | 5
3 | 1
2 | 7
1 | 3
__________________
Diseño Web profesional y creativo: WebSystem.
  #4 (permalink)  
Antiguo 23/02/2013, 15:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array asociativo desde consulta

Ajá, esa es la tabla, ¿y como debería ser el array que quieres generar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 23/02/2013, 15:18
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Array asociativo desde consulta

Este es el array que intento obtener, un array donde cada indice sea a su vez un array, ya que cada tema tiene varios subtemas:

Código:
Array ( [3] => Array ( [0] => 7,[1] => 6,[2] => 1,[3] => 1 ) [4] => Array ( [0] => 2,[1] => 2,[2] => 4 ) [1] => Array ( [0] => 1,[1] => 7,[2] => 1,[3] => 6  ) [2] => Array ( [0] => 7,[1] => 1,[2] => 7,[3] => 5,[4] => 6 ) )
__________________
Diseño Web profesional y creativo: WebSystem.
  #6 (permalink)  
Antiguo 23/02/2013, 15:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array asociativo desde consulta

Entonces, por cada índice debes crear un array, tu código de ahora sobre-escribe el mismo índice cada vez, eso es evidente.

En cada iteración debes comprobar si el índice ya existe o no, si no existe lo creas como array.

Seguido de eso únicamente debes ir agregando valores.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 23/02/2013, 15:27
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Array asociativo desde consulta

ok, voy a probarlo creo haberte entendido. Lo pruebo y te cuento.
__________________
Diseño Web profesional y creativo: WebSystem.
  #8 (permalink)  
Antiguo 23/02/2013, 15:59
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Array asociativo desde consulta

Estoy intentandolo con una función que encontré en el manual:

Código:
if (array_key_exists($row['tema'], $temas_assoc)) {
                    $temas_assoc[$row['tema']] = $row['subtema'];
                } else {
                    $temas_assoc[$row['tema']] = array($row['subtema']);
                }
pero no funciona bien, me da este array:

Código:
Array ( [0] => Array ( ) [3] => 7 [4] => Array ( [0] => 7 ) [1] => 4 [2] => Array ( [0] => 7 ) )
__________________
Diseño Web profesional y creativo: WebSystem.
  #9 (permalink)  
Antiguo 23/02/2013, 16:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array asociativo desde consulta

Es que sigues sobre-escribiendo el mismo índice, que uses array(valor) no agrega nada, no hay diferencia.

Te muestro un ejemplo.
Código PHP:
$foo = array();

foreach (
$candy as $set => $value) {
  if ( ! isset(
$foo[$set])) {
    
$foo[$set] = array(); // creamos el arreglo inicial
  
}

  
$foo[$set] []= $value// vamos agregando

Pienso que deberías leer mas al respecto de arrays, te hace falta entender como funcionan.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 24/02/2013, 13:59
Avatar de ch3ssmaster  
Fecha de Ingreso: enero-2011
Mensajes: 97
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Array asociativo desde consulta

ok, con este ejemplo he conseguido solucionarlo, muchas gracias pateketrueke. Y si, necesito aprender más sobre arrays, son tremendamente útiles.
__________________
Diseño Web profesional y creativo: WebSystem.

Etiquetas: asociativo, mysql, resultados, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:58.