Foros del Web » Programando para Internet » PHP »

Duda con matrices...

Estas en el tema de Duda con matrices... en el foro de PHP en Foros del Web. Muy buenas, Llevo un tiempo manejándome con PHP, pero hasta hace poco no sabía absolutamente nada de matrices, y quiero ponerme a ello estos días ...
  #1 (permalink)  
Antiguo 13/02/2009, 12:14
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 18 años, 2 meses
Puntos: 0
Duda con matrices...

Muy buenas,

Llevo un tiempo manejándome con PHP, pero hasta hace poco no sabía absolutamente nada de matrices, y quiero ponerme a ello estos días

La situación que tengo es la siguiente...
Tengo una matriz multidimensional, la cual está formada por una serie de datos para determinados usuarios. Para que se entienda mejor, os pego el resultado de un print_r de la matriz

Array (
[aommoa] => Array ( [0] => 65 )
[mansilla] => Array ( [0] => 54 )
[lichis] => Array ( [0] => 36.19 [1] => 80 [2] => 58.5 [3] => 95 )
[elnea] => Array ( [0] => 54 )
[xavicid] => Array ( [0] => 16 [1] => 37.5 )
)

Lo que pretendo, es sacar la suma de los valores para cada usuario, y después ordenarlos en base a la suma total

No tengo ni idea de los comandos/funciones a usar para ello, ya digo que hasta ahora nunca había tocado el tema de las matrices... ¿Alguna pista?

Gracias
  #2 (permalink)  
Antiguo 13/02/2009, 12:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con matrices...

Hola falotron,

Puedes usar un foreach() o array_sum() para ir sumandolos y mostrar el resultado.

Saludos
  #3 (permalink)  
Antiguo 13/02/2009, 12:23
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Duda con matrices...

Puedes usar un ciclo para recorrer los usuarios, y dentro otro ciclo para recorrer los valores de cada usuario, irlos sumando y guardarlos en variables
  #4 (permalink)  
Antiguo 13/02/2009, 12:38
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda con matrices...

Cita:
Iniciado por GatorV Ver Mensaje
Hola falotron,

Puedes usar un foreach() o array_sum() para ir sumandolos y mostrar el resultado.

Saludos
Sí, tras echar el primer vistazo es lo que había pensado
Lo que no conozco muy bien es la sintaxis
  #5 (permalink)  
Antiguo 13/02/2009, 12:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con matrices...

Pues, si ves el manual es algo simple:
Código php:
Ver original
  1. foreach( $tuarray as $persona => $datos ) {
  2.      printf( "La persona %s, tiene %d puntos", $persona, array_sum($datos));
  3. }

Saludos
  #6 (permalink)  
Antiguo 13/02/2009, 12:44
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Duda con matrices...

http://php.net/foreach
http://php.net/array_sum
:)
  #7 (permalink)  
Antiguo 13/02/2009, 12:56
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda con matrices...

Cita:
Ya
Si llevo un buen rato mirando esas (y otras) páginas del manual... pero hay mucho que ahí no se explica, y que cuesta de entender si no tienes ciertas nociones

Por ejemplo, en el código que pegaba arriba Gator

Código PHP:
foreach( $tuarray as $persona => $datos ) {
printf"La persona %s, tiene %d puntos"$personaarray_sum($datos));

Deduzco, y veo en el resultado, que %s es $persona y %d es array_sum($datos)
Lo que no sabía, y no se explica por ningún lado (tampoco en la página del manual de printf) es por qué %s y no %z o $x, por ejemplo
A este tipo de cosas me refiero

Se agradece la ayuda igualmente, ya casi tengo lo que necesitaba
  #8 (permalink)  
Antiguo 13/02/2009, 13:07
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Duda con matrices...

Tienes razon, eso no viene en el manual de php, y es heredado de c (cadenas de formato en la funcion printf)
%d Entero decimal
%u Entero decimal con signo
%x Entero hexadecimal
%c Carácter
%f Coma flotante ( float)
%lf Coma flotante ( double)

Por eso es %s, y no %z o %x

Igual GatorV te dio un ejemplo de como usar las funciones qe menciono (foreach y array_sum), tampoco es necesario que sea con printf, podrias usar print o echo, segun lo que sepas usar >_>
  #9 (permalink)  
Antiguo 13/02/2009, 14:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con matrices...

sprintf(), yo si veo la explicación de para que sirve %s y %d...

Saludos
  #10 (permalink)  
Antiguo 14/02/2009, 07:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda con matrices...

Cita:
Iniciado por falotron Ver Mensaje
Se agradece la ayuda igualmente, ya casi tengo lo que necesitaba
Al final ya saqué el código necesario...

Por si alguien buscara algo similar lo publico
La idea era sacar una clasificación de mayor a menor, sumando los valores para cada usuario

En la 1º matriz puede haber varios valores para cada usuario
Teníamos una matriz del tipo...

$matriz = Array (
[aommoa] => Array ( [0] => 65 )
[mansilla] => Array ( [0] => 54 )
[lichis] => Array ( [0] => 36.19 [1] => 80 [2] => 58.5 [3] => 95 )
[elnea] => Array ( [0] => 54 )
[xavicid] => Array ( [0] => 16 [1] => 37.5 )
)

Y gracias a las colaboraciones de este foro hicimos la suma...

Código PHP:
foreach( $matriz as $persona => $datos ) {
$matriz2[array_sum($datos)]=$persona;

Como se vé, he creado una segunda matriz, para obtener la clasificación fácilmente con la función krsort

Código PHP:
krsort($matriz2);
reset($matriz2);
while (list(
$key$val) = each($matriz2)) {
   echo 
"<tr><td><center><b>$val</b></td><td>$key</td></tr>";

Problema resuelto! Gracias a todos
Está interesante esto de las matrices
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:12.