Foros del Web » Programando para Internet » PHP »

Alguna forma rápida de acceder a una pos. array?

Estas en el tema de Alguna forma rápida de acceder a una pos. array? en el foro de PHP en Foros del Web. Buenas, ¿Sabéis si existe alguna forma rápida de acceder a una posición determinada de un array? Ej. imaginad que tenéis una estructura gigantesca padre ---padre ...
  #1 (permalink)  
Antiguo 20/04/2010, 16:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Alguna forma rápida de acceder a una pos. array?

Buenas,

¿Sabéis si existe alguna forma rápida de acceder a una posición determinada de un array?

Ej. imaginad que tenéis una estructura gigantesca

padre
---padre
---hijo---padre---hijo
---

Llega un momento que se hace insostenible tener que poner como base todo el array $arreglo[0]['hijo']...

Fragmento de código real utilizado para recorrer el árbol del array...
Código PHP:
Ver original
  1. for ($i = 0; $i < $num_ligas; $i++) {
  2.         $IDevento=$arreglo[0]['hijo'][$i]['atributos']['DBID'];
  3.         $IDcompeticion=$arreglo[0]['hijo'][$i]['atributos']['LID'];
  4.         $evento=mysql_real_escape_string($arreglo[0]['hijo'][$i]['atributos']['N']);
  5.         $fecha=$arreglo[0]['hijo'][$i]['atributos']['D'];
  6.         $fecha=str_replace("/", "-", $fecha);
  7.         $fecha = date("Y-m-d H:i:s", strtotime($fecha));
  8.         $num_mercados=count($arreglo[0]['hijo'][$i]['hijo']); // Cuento el numero de mercados
  9.  
  10.         for ($j = 0; $j < $num_mercados; $j++) {
  11.             $mercado=mysql_real_escape_string($arreglo[0]['hijo'][$i]['hijo'][$j]['atributos']['N']);
  12.             $IDmercado=$arreglo[0]['hijo'][$i]['hijo'][$j]['atributos']['DBID'];
  13.             $EID=$arreglo[0]['hijo'][$i]['hijo'][$j]['atributos']['EID']; // este debe coincidir con el DBID
  14.             $IDtipomercado=$arreglo[0]['hijo'][$i]['hijo'][$j]['atributos']['GT'];
  15.             $num_pronosticos=count($arreglo[0]['hijo'][$i]['hijo'][$j]['hijo']); // Cuento el numero de pronosticos
  16.            
  17.             for ($k = 0; $k < $num_pronosticos; $k++) {
  18.                 $pronostico=mysql_real_escape_string($arreglo[0]['hijo'][$i]['hijo'][$j]['hijo'][$k]['atributos']['N']);
  19.                 $IDpronostico=$arreglo[0]['hijo'][$i]['hijo'][$j]['hijo'][$k]['atributos']['DBID'];
  20.                 $cuota=$arreglo[0]['hijo'][$i]['hijo'][$j]['hijo'][$k]['atributos']['O'];


¿Existe alguna forma de acceder más rápidamente en los arrays?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 20/04/2010, 16:16
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Alguna forma rápida de acceder a una pos. array?

OMG que complicado eso :P
la manera mas facil seria cambiando la forma en la que trabajas =)
prueba tambien funciones recursivas
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 20/04/2010, 16:25
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Alguna forma rápida de acceder a una pos. array?

Cita:
Iniciado por Hidek1 Ver Mensaje
OMG que complicado eso :P
la manera mas facil seria cambiando la forma en la que trabajas =)
prueba tambien funciones recursivas
Creo que ni con funciones recursivas podrías evitar recorrer los arrays de esa forma... piensa que los campos tienen nombres muy diferentes...

Estoy prácticamente seguro que con simpleXML se podría simplificar, pero el reto está en aprender a tratar ese tipo de arrays!

¿Alguna idea?

Muchas gracias!
  #4 (permalink)  
Antiguo 20/04/2010, 19:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Alguna forma rápida de acceder a una pos. array?

yo creo que con recursividad todo es posible...

además, estás usando varios nombres convencionales: atributos, hijo además de -supongo- numéricos...

en cambio si todos los índices fueran realmente distintos sería un buen problema... pero lo dudo, en realidad yo también me pregunto que haces con dicho código, que se ve bastante enredado y confuso de analizar...

incluso me atrevo a decir que el diseño de tu solución es realmente el problema... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 20/04/2010, 23:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Alguna forma rápida de acceder a una pos. array?

Cita:
Iniciado por pateketrueke Ver Mensaje
yo creo que con recursividad todo es posible...

además, estás usando varios nombres convencionales: atributos, hijo además de -supongo- numéricos...

en cambio si todos los índices fueran realmente distintos sería un buen problema... pero lo dudo, en realidad yo también me pregunto que haces con dicho código, que se ve bastante enredado y confuso de analizar...
Pero si te fijas hay 3 bucles anidados, nuse con la recursividad podría llegar a un primer nivel de bucle no a 3 xD (no doy pa más)

Cita:
Iniciado por pateketrueke Ver Mensaje
incluso me atrevo a decir que el diseño de tu solución es realmente el problema... (:
Correcto, no lo negué en ninguno de los posts anteriores, incluso opiné que con simpleXML se podría sacar de una manera mas limpia, ya que se trata de un fichero XML que estoy leyendo.

Sin embargo, al utilizar una función/clase que me convierte el fichero xml a un array se me presentaba ese problema, cómo tratar el gigantesco array de la manera más optima.

Muchas gracias
  #6 (permalink)  
Antiguo 21/04/2010, 09:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Alguna forma rápida de acceder a una pos. array?

Yo creo ahí esta el problema, ya que si ya tienes la información en el XML no la deberías de pasar a un array, ya que con XML puedes usar un XPATH para buscar el nodo que necesites y extraer la información que requieres.

Saludos.

Etiquetas: acceder, formulario
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 17:03.