Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/02/2013, 06:56
hcanovas
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Comparar arrays

Hola,

Os cuento mi situación a ver si algún iluminado consigue alguna forma de solucionar mi problema.

Estoy haciendo un sistema de facturación, con productos, periodos de los productos (duración), precio, etc.

El asunto es el siguiente, tengo varios arrays dobles ($paymentdate[$i][$e], $periodstart[$i][$e], $periodend[$i][$e], $price[$i][$e], $rep[$i][$e]; donde $i es el número de producto y $e es la entrada: una por cada mes de periodo del producto).

Lo que necesito es que se pisen entre si los meses, es decir, si por ejemplo en el producto 1, periodo 1 (que empieza en febrero), coincide con el producto 2, periodo 1 (que también empiece en febrero), que el resultado a mostrar sea la suma de los dos precios.

Actualmente lo que tengo es lo siguiente:
Código:
$dates = array();
echo tab(0).'<table class="coverage">';
for ($pr1 = 1; $pr1 < ($count+1); $pr1++) {
	for ($re1 = 0; $re1 < $result; $re1++) {
		for ($pr2 = 1; $pr2 < ($count+1); $pr2++) {
			for ($re2 = 0; $re2 < $result; $re2++) {
				if ($pr1 !== $pr2) {
					if (!in_array($_paymentdate[$pr1][$re1],$dates)) {
						if ($_paymentdate[$pr1][$re1] == $_paymentdate[$pr2][$re2]) {
							array_push($dates,$_paymentdate[$pr1][$re1]);
							echo '<tr><td>1 - '.$_paymentdate[$pr1][$re1].'</td><td>'.$_periodstart[$pr1][$re1].' - '.$_periodend[$pr1][$re1].'</td><td>'.($_price[$pr1][$re1]+$_price[$pr2][$re2]).'</td></tr>';
						} elseif ($_paymentdate[$pr1][$re1] < $_paymentdate[$pr2][$re2]) {
							array_push($dates,$_paymentdate[$pr1][$re1]);
							echo '<tr><td>2 - '.$_paymentdate[$pr1][$re1].'</td><td>'.$_periodstart[$pr1][$re1].' - '.$_periodend[$pr1][$re1].'</td><td>'.$_price[$pr1][$re1].'</td></tr>';
						} elseif ($_paymentdate[$pr1][$re1] > $_paymentdate[$pr2][$re2]) {
							array_push($dates,$_paymentdate[$pr1][$re1]);
							echo '<tr><td>3 - '.$_paymentdate[$pr1][$re1].'</td><td>'.$_periodstart[$pr1][$re1].' - '.$_periodend[$pr1][$re1].'</td><td>'.$_price[$pr1][$re1].'</td></tr>';
						}
					}
				}
			}

		}
	}
}
Problema: si una fecha de inicio del segundo producto es más pequeña o más grande que la del primer producto (que va a pasar siempre, ya que el segundo bucle pasa dos veces por una del primero), entra en ese if, añade la fecha en $dates y ya no escribirá más una entrada con esa fecha.

La explicación no es muy clara, así que si alguien quiere ayudar y no entiende alguna cosa, que pregunte. Intentaré aclararle lo que necesite.

Un saludo y gracias.