Foros del Web » Programando para Internet » PHP »

Sumar dos arrays

Estas en el tema de Sumar dos arrays en el foro de PHP en Foros del Web. Hola! Llevo ya mucho tiempo intentando suma dos arrays pero, de forma que cuando encuentre algún elemento duplicado, sume el valor que tiene con el ...
  #1 (permalink)  
Antiguo 29/05/2004, 09:07
 
Fecha de Ingreso: mayo-2004
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 1
Pregunta Sumar dos arrays

Hola!
Llevo ya mucho tiempo intentando suma dos arrays pero, de forma que cuando encuentre algún elemento duplicado, sume el valor que tiene con el de la otra array. Por ejemplo si en un array hay 3 tomates y la uno con otro array que tiene 4 tomates, que el resultado sea 7 tomates. Lo he intentado de mil maneras y nada, no hay forma. El código final es este:

"<?
$tabla = array ("Tomates" => "3", "Patatas" => "8", "Harina" => "100", "Truchas" => "13", "Agua" => "8");
$tabla2 = array ("Perjil" => "12","Tomates" => "4","Sardinas" => "45");
$result = array_merge ($tabla, $tabla2);
foreach($tabla as $k => $v){
if (array_key_exists($k, $tabla2)) {
foreach($tabla as $k2 => $v2)
{
if ($k == $k2){
$v = $v + $v2;
echo 'Ingrediente:<br> '.$k.' ud: '.$v. ' <br>';
echo 'Ingrediente:<br> '.$k2.' ud: '.$v2. ' <br>';
}
}
}else{
foreach($result as $k3 => $v3){
echo 'Ingrediente:<br> '.$k3.' ud: '.$v3. ' <br>';
}
}
?>"

Tampoco funciona, y ruego que el que sepa donde está el fallo me lo diga lo antes posible ya que estoy desesperado y lo necesito urgentemente. Muchas gracias por todo.
  #2 (permalink)  
Antiguo 29/05/2004, 12:58
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
Tienes algunos errores, para empezar te hace falta cerrar la llave del primero foreach.. luego, después de que compruebas que el array 2 tiene ese mismo indice, deberías simplemente sumarlos, pero tu vuelves a recorrer el array 1, y sumas los indices iguales, por lo que si en la tabla 1 tienes 3 tomates, y le sumas otros 3 tomates de esa misma tabla, te da 6 a la primer salida, lo cual es incorrecto...

aqui te dejo el código corregido...

//definición de arreglos
$tabla = array ("Tomates" => "3", "Patatas" => "8", "Harina" => "100", "Truchas" => "13", "Agua" => "8");
$tabla2 = array ("Perjil" => "12","Tomates" => "4","Sardinas" => "45", "Truchas" => "14");

//suma de índices iguales para tabla 1
foreach($tabla as $k => $v)
if (array_key_exists($k, $tabla2))//si existe en la tabla dos lo sumamos
{
$valorTabla2 = $tabla2[$k];
$total = $valorTabla2 + $v;
echo '<br />Total Suma de '.$k.': '.$total.'<br />';
}
else //si no existe, entonces simplemente desplegamos
echo '<br />Total de '.$k.': '.$v.'<br />';

//despliege de indices no coincidentes en tabla 2
foreach($tabla2 as $k => $v)
if (!array_key_exists($k, $tabla))//si no existe en la tabla 1 lo mostramos
echo '<br />Total de '.$k.': '.$v.'<br />';

el código ya está probado... en este caso solo puse totales, tu puedes agregar el desglose...
un saludo
  #3 (permalink)  
Antiguo 29/05/2004, 13:04
 
Fecha de Ingreso: mayo-2004
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 1
Gracias, eres un genio!!!
Poco a poco iré aprendiendo,
Esto es mundo inmenso!!!
Hasta otra!!!
  #4 (permalink)  
Antiguo 29/05/2004, 15:53
 
Fecha de Ingreso: mayo-2004
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 1
Ya sé que soy un poco pesado, pero me gustaría resolver una duda. ¿Cómo podría con ese código construir un array con los resultados? He estado intentándolo y me da todo errores.
Muchas gracias por todo.

Última edición por jorge_368; 29/05/2004 a las 16:08
  #5 (permalink)  
Antiguo 29/05/2004, 21:47
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
<?php
//definición de arreglos
$tabla = array ("Tomates" => "3", "Patatas" => "8", "Harina" => "100", "Truchas" => "13", "Agua" => "8");
$tabla2 = array ("Perjil" => "12","Tomates" => "4","Sardinas" => "45", "Truchas" => "14");
$resultados = array();
//suma de índices iguales para tabla 1
foreach($tabla as $k => $v)
if (array_key_exists($k, $tabla2))//si existe en la tabla dos lo sumamos
{
$valorTabla2 = $tabla2[$k];
$total = $valorTabla2 + $v;
$resultados[$k] = $total;
}
//si no existe, entonces simplemente desplegamos
else
$resultados[$k] = $v;

//despliege de indices no coincidentes en tabla 2
foreach($tabla2 as $k => $v)
if (!array_key_exists($k, $tabla))//si no existe en la tabla 1 lo mostramos
$resultados[$k] = $v;

foreach($resultados as $i => $v)
echo '<p>Total de '.$i.' = '.$v.'</p>';
?>

un saludo..
  #6 (permalink)  
Antiguo 30/05/2004, 01:39
 
Fecha de Ingreso: mayo-2004
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 1
Gracias GENIO,
Hasta luego!!!
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 12:34.