Foros del Web » Programando para Internet » PHP »

Ayuda con Arrays

Estas en el tema de Ayuda con Arrays en el foro de PHP en Foros del Web. Hola. Tengo la sgte. informacion: Array1 = ('srivas','alopez','psoto'); Array2 = ('250','320','85'); Array3 = ('35','85','63'); Array4 = ('15','40','80'); Lo que necesito es mostrar todos los datos ...
  #1 (permalink)  
Antiguo 11/09/2006, 16:14
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Ayuda con Arrays

Hola.
Tengo la sgte. informacion:
Array1 = ('srivas','alopez','psoto');
Array2 = ('250','320','85');
Array3 = ('35','85','63');
Array4 = ('15','40','80');

Lo que necesito es mostrar todos los datos que tengo en los array, eso no es problema.
Los muestro en una tabla que la construyo con un for, como todos los arreglos son del mismo largo.
y queda asi:
srivas --- 250 --- 35 -- 15
etc.

Lo que necesito es mostrar los arrays en forma ordenada descendente, pero donde los valores que deben ir descendente son los incluidos en Array4.
Todo esto sin perder la relación de los elementos de los array.
Es decir, segun el ejemplo, despues de aplicar algun ordenamiento, la tabla quedaria asi :

psoto --- 85 --- 96 -- 80

Espero que me entiendan y me puedan ayudar.
De antemano Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #2 (permalink)  
Antiguo 11/09/2006, 17:12
 
Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 17 años, 8 meses
Puntos: 0
La relación que dices no se debe perder (y que pierdes al ordenar al array 4) en realidad no existe explícitamente, sólo lo hace porque inicialmente has montado los arrays de esa forma (los haces coincidir tú). Puedes conseguir esa relación explícita usando claves. Quiero decir que puedes acceder a los valores de los tres primeros arrays usando índices asociativos del cuarto. Los tendrías que definir así:

Código PHP:
$Array1 = array("15"=>'srivas',"40"=>'alopez',"80"=>'psoto');
$Array2 = array("15"=>'250',"40"=>'320',"80"=>'85');
$Array3 = array("15"=>'35',"40"=>'85',"80"=>'63'); 
El $Array4 ya no te sirve, puesto que ahora se encuentra de algún modo como una serie de índices del resto de arrays. Ahora para ordenar cada uno de los arrays puedes usar la función krsort() que ordena vectores indexados asociativamente (nuestro nuevo caso) preservando los pares clave-valor iniciales, y lo hace de forma inversa (descendente).

Código PHP:
krsort($Array1SORT_NUMERIC);
krsort($Array2SORT_NUMERIC);
krsort($Array3SORT_NUMERIC); 
La constante SORT_NUMERIC sirve para que se traten los índices de los arrays como números (así 1000 sería mayor que 999, cosa que no sucede en una ordenación alfanumérica puesto que 9 > 1)

Finalmente, para recorrer los arrays ordenados y acceder a la clave puedes combinar list() con each() así:

Código PHP:
while (list($clave) = each($Array1))
    echo 
$clave." ".$Array1[$clave]." ".$Array2[$clave]." ".$Array3[$clave]."\n"
Esto imprimirá lo que creo que buscabas.
  #3 (permalink)  
Antiguo 12/09/2006, 07:54
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias por constestar,
pero disculpa lo inexperto.
Los 4 arrays que puse son solo un ejemplo de datos que obtengo a travez de varias querys.
En realidad el cuarto array es un porcentaje respecto de los valores del tercero sobre el segundo, asi que podria obviarlo y obtener ese valor dentro de cada iteración que haga para imprimir los datos.
Entonces, ya solo tendria 3 arrays.
El primero con los nombres, y dos mas con valores.
El ordenamiento seria por los valores del tercer array.
Y otra vez, no debo perder la relación entre ellos.
Espero que alguien me pueda ayudar y orientar.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #4 (permalink)  
Antiguo 12/09/2006, 08:09
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Bd........

Hola, dices que utilizas BD, por que no haces la consulta segun el criterio que pides, es mucho mas facil, pues te estas complicando, la vida, intentando hacerlo via arrays, que dicho sea de paso, no es muy usado, en fin creo que seria el metodo de la burbuja para ordenarlos, y en cuanto a la no perder el orden del otro array, pues usa un array auxiliar y listo. creo que asi, segun entendi jaja
  #5 (permalink)  
Antiguo 12/09/2006, 08:24
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Si, por BD seria mas facil.
Pero los valores que utilizo para hacer el orden no dependen de las mismas querys que tengo para retornar los datos anteriores.
En resumen, tengo 3 arrays.
Uno con nombres de usuarios, y dos con distintos valores.
Los 3 arrays tienen el mismo largo.
Solo debo ordenar por los valores del tercer array, pero sin perder la relación entre los 3 arrays.
Espero se entienda bien y alguien me ayude.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #6 (permalink)  
Antiguo 12/09/2006, 11:43
 
Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 17 años, 8 meses
Puntos: 0
Ya te dije que esa relación de la que hablas la ves tú porque sabes que así es. Pero en realidad, los 3 arrays (¿o eran 4?) son independientes entre sí, a menos que hagas algo para relacionarlos explícitamente (por ejemplo, lo de la primera respuesta). De todos modos, si quieres que te ayudemos mejor, estaría bien que mandaras el código para ver cómo construyes las matrices. O quizás sea posible montar la consulta con el orden adecuado. Como lo único que he podido ver era lo de tu primer post, se me ocurrió lo del segundo. Pero tal vez la solución sea más simple.

Un saludo.
  #7 (permalink)  
Antiguo 13/09/2006, 08:50
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Postea algo de los arrays

hola mejor coloca algo de los contenidos de los arrays, y asi se ve mas facil el ayudarte no crees...
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 16:25.