Foros del Web » Programando para Internet » PHP »

Problema array

Estas en el tema de Problema array en el foro de PHP en Foros del Web. Hola, tengo un el siguiente codigo--> <?php for($i=1;$i<count($array2);$i++){ echo $array2[$i]['nombre'] echo $array2[$i]['precio'] echo $array2[$i]['maximo'] } ?> nombre:Pepe /precio:2,7 /maximo:5 nombre:Manolo /precio:4,2 /maximo:6 nombre:Pepe /precio:3.5 /maximo:4 ...
  #1 (permalink)  
Antiguo 18/06/2014, 02:26
 
Fecha de Ingreso: febrero-2012
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Problema array

Hola, tengo un el siguiente codigo-->

<?php

for($i=1;$i<count($array2);$i++){

echo $array2[$i]['nombre']
echo $array2[$i]['precio']
echo $array2[$i]['maximo']

}


?>

nombre:Pepe /precio:2,7 /maximo:5
nombre:Manolo /precio:4,2 /maximo:6
nombre:Pepe /precio:3.5 /maximo:4
nombre:Pepe /precio:4,8 /maximo:8
nombre:Juan /precio:2,6/ maximo:3
nombre:Manolo / precio: 8/maximo:1

este seria el resultado del array

Como Hago para sacar todos los repetido de un mismo nombre, asi podre sumar el precio de todos que tengan el mismo nombre e imprimirlo una vez solo el nombre por pantalla con el precio total,

Muchas Gracias!
  #2 (permalink)  
Antiguo 18/06/2014, 02:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problema array

Esto lo tendrás en una bbdd luego es mucho mas facil hacerlo en la consulta que crea el array.

Código MySQL:
Ver original
  1. SELECT nombre,SUM(precio),MAX(maximo)
  2. FROM tuTabla
  3. GROUP BY nombre;

esto te da los datos tal y como los necesitas.

En php tambien se puede hacer pero es mucho mas complicado, deberias ordenar el array por nombre, y luego sumar mientras el nombre sea el mismo y buscar el maximo:

Una función para ordenar el array array_orderby http://www.php.net/manual/en/functio...ort.php#100534

Código PHP:
Ver original
  1. $arrayOrdenado=array_orderby($array2,'nombre', SORT_ASC);
  2. $nombre=$arrayOrdenado[0]["nombre"];
  3. $sumaPrecio=0;
  4. $maximo=0;
  5. $arrayResumen=array();
  6. for($p=0;$p<count($arrayOrdenado);$p++){
  7.      if($arrayOrdenado[$p]["nombre"]!=$nombre){
  8.           $arrayResumen[]["nombre"]=$nombre;
  9.           $arrayResumen[]["sumaPrecio"]=$sumaPrecio;
  10.           $arrayResumen[]["maximo"]=$maximo;
  11.           $nombre=$arrayOrdenado[$p]["nombre"];
  12.           $sumaPrecio=0;
  13.           $maximo=0;
  14.       }
  15.        $sumaPrecio=$sumaPrecio+$arrayOrdenado[$p]["precio"];
  16.         if($arrayOrdenado[$p]["maximo"]>$maximo)
  17.                $maximo=$arrayOrdenado[$p]["maximo"];
  18. }
  19. for($i=0;$i<count($arrayResumen);$i++){
  20.  
  21. echo $arrayResumen[$i]['nombre']
  22. echo $arrayResumen[$i]['sumaPrecio']
  23. echo $arrayResumen[$i]['maximo']
  24.  
  25. }

Lo he hecho al vuelo, puede contener errores.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 18/06/2014 a las 02:59
  #3 (permalink)  
Antiguo 18/06/2014, 02:55
 
Fecha de Ingreso: abril-2013
Ubicación: Barcelona
Mensajes: 78
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Problema array

Tienes varias soluciones posibles, una de ellas es comprobar si el nombre se repite dentro del for en el que lo muestras y otra es ir almacenando los nombres que van saliendo para saber si ya existe.
ejemplo del método 1 que te dije:
<?php
for($i=1;$i<count($array2);$i++){
for($e=$i+1;$e<count($array2);$e++){
if($array2[$i]['nombre']==$array2[$e]['nombre']){
$array2[$i]['precio']+=$array2[$e]['precio'];
$array2[$e]['maximo']+=$array2[$e]['maximo'];
array_splice($array2, $e, 1);
}
}
echo $array2[$i]['nombre']
echo $array2[$i]['precio']
echo $array2[$i]['maximo']
}
?>
No se si fusionara pero si falla sera por algún pequeño fallo.
  #4 (permalink)  
Antiguo 18/06/2014, 04:16
 
Fecha de Ingreso: febrero-2012
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Problema array

MUchisismas gracias, ahora cuando acabe una tarea lo volvere a probar

Saludos !!

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:12.