Foros del Web » Programando para Internet » PHP »

Array Multidimensionales

Estas en el tema de Array Multidimensionales en el foro de PHP en Foros del Web. Wenas Estoy tratando de crear un array multidimensional pero la verdad no me sale, les explico aver si me puede ayudar. Tengo 2 arrays armados: ...
  #1 (permalink)  
Antiguo 05/09/2011, 01:15
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Pregunta Array Multidimensionales

Wenas

Estoy tratando de crear un array multidimensional pero la verdad no me sale, les explico aver si me puede ayudar.

Tengo 2 arrays armados: name_columnas y result_bd.

en name_columnas lo tengo asi:

array([0]=>name,[1]=>link,[2]=>subt);

el otro array es asi:

Array ( [0] => Inicio [1] => http://local [2] => Volver al inicio [3] => Productos [4] => http://local/2 [5] => Nuestros Productos )

Y lo que estoy intentando de hacer es que quede asi:

array(
array([name]=>"Inicio","Productos"),
array([link]=>"http://local","http://local/2"),
array([subt]=>"Volver al inicio","Nuestros Productos")
)

Como ven un array contiene mas indices que el otro y por lo tanto un for o while no me serviria para que quede de esa forma y el problema es que no se como puedo armarlo de esa manera, no se si estoy armando bien los arrays anteriores o como deberia de hacerlo ya que se generan de forma automatica al realizar un bucle.

Espero que me hallan entendido.

Gracias!
  #2 (permalink)  
Antiguo 05/09/2011, 01:44
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Array Multidimensionales

A mi se me hace que te estás complicando, agrégalos desde la consulta de esta manera:

Código PHP:
Ver original
  1. <?php  //Obviamente va dinámicamente
  2. $arr['name'][] = 'Inicio';
  3. $arr['link'][] = 'http://local';
  4. $arr['subt'][] = 'Volver al inicio';
  5. $arr['name'][] = 'Productos';
  6. $arr['link'][] = 'http://local/2';
  7. $arr['subt'][] = 'Nuestros Productos';
  8.  
  9. echo '<pre>';
  10. print_r($arr);
  11. echo '</pre>';

y ya lo tienes fácil para recorrerlo, no hace falta más.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 05/09/2011, 10:09
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Array Multidimensionales

Gracias por responder.

Estube intentando y no hay forma almenos no pude yo...

Lo intente asi:

Código PHP:
Ver original
  1. for($o=0;$o<$cantExplode;$o++){
  2.     $stack[] = array($execExplode[$o] => $q[$execExplode[$o]]);
  3. }

Y el resultado es este:

Código PHP:
Ver original
  1. Array ( [0] => Array ( [name] => Inicio ) [1] => Array ( [link] => http://local ) [2] => Array ( [subtitulo] => Volver al inicio ) [3] => Array ( [name] => Productos ) [4] => Array ( [link] => http://local/2) [5] => Array ( [subtitulo] => Nuestros Productos ) )

Y no es como yo lo quiero..

Yo lo necesito de esta forma:

Código PHP:
Ver original
  1. $stack[] = array(
  2. array([name]=>"Inicio","Productos"),
  3. array([link]=>"http://local","http://local/2"),
  4. array([subt]=>"Volver al inicio","Nuestros Productos")
  5. )

De esta forma yo despues puedo lograr hacer esto:

$stack["name"]["Inicio"];
$stack["name"]["Productos"];

Espero que me puedan ayudar
  #4 (permalink)  
Antiguo 05/09/2011, 10:34
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Array Multidimensionales

Para lograr esto:

$stack["name"]["Inicio"];
$stack["name"]["Productos"];

Tendrias que hacerlo de otra manera, si lo armas como tu dices te quedarian asi:

$stack["name"][0]; //Inicio
$stack["name"][1]; //Productos

Con esto lo dejas como tu quieres.
Código PHP:
Ver original
  1. $stack = '';
  2. $nStack = '';
  3. $lStack = '';
  4. $sStack = '';
  5. //precarga de datos
  6. $name_columnas[0] = "name";
  7. $name_columnas[1] = "link";
  8. $name_columnas[2] = "subt";
  9.  
  10. $result_bd[0] = "Inicio";
  11. $result_bd[1] = "http://local";
  12. $result_bd[2] = "Volver al inicio";
  13. $result_bd[3] = "Productos";
  14. $result_bd[4] = "http://local/2";
  15. $result_bd[5] = "Nuestros Productos";
  16.  
  17. $num = count($result_bd);
  18. for($a=0;$a<$num;$a=$a+3){
  19.     $nStack[$result_bd[$a]]     = "";
  20.     $lStack[$result_bd[($a+1)]] = "";
  21.     $sStack[$result_bd[($a+2)]] = "";
  22. }
  23. $stack = array($name_columnas[0]=>$nStack,$name_columnas[1]=>$lStack,$name_columnas[2]=>$sStack);
  24.  
  25. var_dump($stack);

Con esto lo dejas como lo muestras en la descripcion del arreglo.
Código PHP:
Ver original
  1. $stack = '';
  2. $nStack = '';
  3. $lStack = '';
  4. $sStack = '';
  5. //precarga de datos
  6. $name_columnas[0] = "name";
  7. $name_columnas[1] = "link";
  8. $name_columnas[2] = "subt";
  9.  
  10. $result_bd[0] = "Inicio";
  11. $result_bd[1] = "http://local";
  12. $result_bd[2] = "Volver al inicio";
  13. $result_bd[3] = "Productos";
  14. $result_bd[4] = "http://local/2";
  15. $result_bd[5] = "Nuestros Productos";
  16.  
  17. $num = count($result_bd);
  18. for($a=0;$a<$num;$a=$a+3){
  19.     $nStack[] = $result_bd[$a];
  20.     $lStack[] = $result_bd[($a+1)];
  21.     $sStack[] = $result_bd[($a+2)];
  22. }
  23. $stack = array($name_columnas[0]=>$nStack,$name_columnas[1]=>$lStack,$name_columnas[2]=>$sStack);
  24.  
  25. var_dump($stack);

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 05/09/2011, 11:32
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Array Multidimensionales

@marvin en la primera forma sólo pusiste la clave y el valor donde lo dejas? Bueno tal vez él lo necesite así pero sigo pensando que se está complicando la vida y la segunda forma es exactamente a lo que yo dejé, no hace falta dar un recorrido tan largo.

Código PHP:
Ver original
  1. <?php  //Obviamente va dinámicamente
  2. $arr['name']['Inicio'] = 'Inicio';
  3. $arr['link']['http://local'] = 'http://local';
  4. $arr['subt']['Volver al inicio'] = 'Volver al inicio';
  5. $arr['name']['Productos'] = 'Productos';
  6. $arr['link']['http://local/2'] = 'http://local/2';
  7. $arr['subt']['Nuestros Productos'] = 'Nuestros Productos';
  8.  
  9. echo '<pre>';
  10. print_r($arr);
  11. echo '</pre>';

Creo que eso es lo que estás buscando, pero a la larga lo que quieres te va a poner problema, si se repite cualquier nombre o link se va a reemplazar si lo haces como quieres. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 05/09/2011 a las 11:44
  #6 (permalink)  
Antiguo 05/09/2011, 12:44
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Array Multidimensionales

Efectivamente la primera opcion es para que pueda acceder como el quiere... o sea...
$stack["name"]["Inicio"];
$stack["name"]["Productos"];

Da lo mismo el valor si finalmente esta controlando el menu por la clave, y por lo mismo en el segundo ejemplo le di los valores en vez de clave para que pueda accederlos asi:
$stack["name"][0]; //Inicio
$stack["name"][1]; //Productos

Arme la funcion tomando en cuenta que sus valores estan siendo tomados de dos arreglos, de todas maneras estoy exponiendo otra manera de hacerlo, sin duda el codigo que has aportado tambien hace esto, eso no lo pongo en dudas

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #7 (permalink)  
Antiguo 05/09/2011, 12:45
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Array Multidimensionales

Marvin entiendo lo que realizastes pero en ese caso quedaria siempre fijo ya que si cambio por ejemplo el orden del link o name, me cambiara toda la estructura, la idea es realizar algo dinamico que no necesite arreglos despues.

andresdzphp

No e podido realizar como tu lo dices ya que una precarga de datos no es posible, ya que el contenido es generado automaticamente mediante un foreach.

Les voy a dejar una parte del script para que entiendan.

Código PHP:
Ver original
  1. function leer_datos_bd($tabla,$columna,$link){
  2.         $db = conectaDb();
  3.         if(($tabla != "") || ($columna != "")){
  4.             $consulta = "SELECT * FROM ".$tabla;
  5.             $query = $db->query($consulta);
  6.             global $contadorLeer, $result_bd, $multiResult;
  7.                    $contadorLeer = 0;
  8.                    $result_bd = array();
  9.                    if(count(explode("/",$columna)) > 1){
  10.                         $execExplode   = explode("/",$columna);
  11.                         $cantExplode = count($execExplode);
  12.                         for($o=0;$o<$cantExplode;$o++){
  13.                             $name_columnas[] = $execExplode[$o];
  14.                         }
  15.                     }
  16.                     //print_r($name_columnas);
  17.                     $stack=array();
  18.                 foreach($query as $q){
  19.                     if(count(explode("/",$columna)) > 1){
  20.                         $execExplode   = explode("/",$columna);
  21.                         $cantExplode = count($execExplode);
  22.                         for($o=0;$o<$cantExplode;$o++){
  23.                             $stack[] = array($execExplode[$o] => $q[$execExplode[$o]]);
  24.                         }
  25.                        
  26.                     }

aclaro que solo es una parte del codigo.
  #8 (permalink)  
Antiguo 05/09/2011, 12:52
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Array Multidimensionales

En ese caso te conviene traer los datos ordenados desde la consulta, porque si nunca vas a controlar el orden ni de los datos ni tampoco del nombre de las columnas, es mas que complejo generar una funcion que identifique a que nombre de columna pertenece cada valor.

Si quieres copia el diccionario de datos de las tablas que tienen la informacion y vemos que se puede hacer.

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #9 (permalink)  
Antiguo 05/09/2011, 12:55
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Array Multidimensionales

Lo siento no se con que te refieres a diccionario.
Si lo se que es complejo pero es algo que necesito para aprender y practicar ya que no creo que sea la ultima vez que me enfrente con algo de este tipo.
  #10 (permalink)  
Antiguo 05/09/2011, 13:19
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Array Multidimensionales

Trate de entender mejor la logica de Andres y me salio esto:

Código PHP:
Ver original
  1. (
  2.     [name] => Productos
  3.     [link] => local
  4.     [subtitulo] => Nuestros Productos
  5. )

El problema es que me esta sacando el ultimo dato de la bd sobreescribiendo el primero como evito que pase eso? poniendo otro array se desforma todo creo

EDIT: ya logre mi cometido muchas gracias, vere si funciona correctamente y les dire si funciono
  #11 (permalink)  
Antiguo 05/09/2011, 13:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Array Multidimensionales

Tienen que tener una clave que diferencie los datos para que no se sobrescriban. Me alegro que hayas avanzado. Nos comentas en que termina el asunto.

Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 05/09/2011, 14:21
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Array Multidimensionales

Excelente muchachos muchas gracias a los 2!


Ahora lo unico que hago para llamar a los datos es echo $arr["name"][$i] con un for y listo, con su ayuda e simplificado 6 o 7 lineas de codigo de una consulta mysql de ABM :), claro aun me quedan cosas por arreglar pero vamos bien por ahora.

Lo hice para limpiar el HTML y no llenarlo de codigo php y dejar lo mas limpio posible el HTML

Gracias!

Etiquetas: Ninguno
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 21:47.