Foros del Web » Programando para Internet » PHP »

Generar un array, compararlo con otro y contar coincidencias

Estas en el tema de Generar un array, compararlo con otro y contar coincidencias en el foro de PHP en Foros del Web. Muy buenas, estoy liado con un calendario de reservas hoteleras y resulta que tengo precios distintos para los viernes y sabados y otro precio para ...
  #1 (permalink)  
Antiguo 04/10/2012, 11:49
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 7 años, 8 meses
Puntos: 11
Generar un array, compararlo con otro y contar coincidencias

Muy buenas, estoy liado con un calendario de reservas hoteleras y resulta que tengo precios distintos para los viernes y sabados y otro precio para el resto de dias, asi que se me ha ocurrido tener un array con los dias viernes y sabados y otro con el numero de dias de la reserva, compararlos y sacar el numero de coincidencias.

Quiero saber como puedo a partir de dos numeros sacar cada numero entre ellos (inclusive el 1º pero no el ultimo) y montarlos en un aray.

Por ejemplo un cliente entra el dia 8 y sale el dia 12. ¿Creo que podria ser con un for?

Algo por el estilo:
Código PHP:
Ver original
  1. <?php
  2.     $diaEntrada = 8;
  3.     $diaSalida = 12;
  4.  
  5.     for ($i=$diaEntrada; $i<$diaSalida; $i++) {
  6.  
  7.         echo $i;
  8.     }
  9. ?>

La var "i" me daria como resultado 8, 9, 10 y 11, ¿como genero un array que contenga los valores resultantes?

Una vez los tenga, imaginemos que un estemos en Junio de 2012 que tiene como viernes y sabados los dias 1, 2, 8, 9, 15, 16, 22, 23, 29 y 30.

yo tendria pues un array:

Código PHP:
Ver original
  1. $ar1 = array (8,9,10,11);
  2. $ar2 = array(1,2,8,9,15,16,22,23,29,30);

¿Como sacaria el numero de coincidencias entre uno y otro? En este caso 2 coincidencias

No se si voy bien encaminado o si en realidad hay otro camino mas facil... No se, a ver que me podeis decir.

Saludos.
  #2 (permalink)  
Antiguo 04/10/2012, 11:59
Avatar de efedefernan  
Fecha de Ingreso: diciembre-2007
Ubicación: Cantabria
Mensajes: 91
Antigüedad: 12 años, 1 mes
Puntos: 11
Respuesta: Generar un array, compararlo con otro y contar coincidencias

Hola:
Se me ocurre que podrias hacer algo como esto.

Código PHP:

<?php
    $ar1 
= array (8,9,10,11);
    
$ar2 = array(1,2,8,9,15,16,22,23,29,30);
    for(
$a=0;$a<count($ar1);$a++)
    {
        if(
in_array($ar1[$a],$ar2))
        {
            
$res[]=$ar1[$a];
        }
    }

// En $res tienes un array con los valores que necesitas
echo "<pre>";
print_r($res);
?>
  #3 (permalink)  
Antiguo 04/10/2012, 12:31
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 7 años, 8 meses
Puntos: 11
Respuesta: Generar un array, compararlo con otro y contar coincidencias

Eso resuelve la 2º parte, muchas gracias ^^

Pero sigo sin manejarme muy bien con arrays asi que no se como generar el $ar1 a partir de dos dias distintos.

EDITO: Llevaba varios dias dando vueltas y al final postee esto, y por pura coincidencia acabo de encontrar la forma de sacar lo que busco... En un foro ingles encontre el codigo necesario para contar dias determinados entre un rango de fechas dado.
Código PHP:
Ver original
  1. <?php
  2. $date1 = '2012-10-05';
  3. $date2 = '2012-10-07';
  4.  
  5. $num_saturdays = 0;
  6. for ($i = 0; $i < ((strtotime($date2) - strtotime($date1)) / 86400); $i++){
  7.     if(date('l',strtotime($date1) + ($i * 86400)) == 'Saturday'){
  8.         $num_saturdays++;
  9.     }
  10. }
  11.  
  12. $num_friday = 0;
  13. for ($i = 0; $i < ((strtotime($date2) - strtotime($date1)) / 86400); $i++){
  14.     if(date('l',strtotime($date1) + ($i * 86400)) == 'Friday'){
  15.         $num_friday++;
  16.     }
  17. }
  18.  
  19. echo 'There are '.$num_friday.' Friday and '.$num_saturdays.' Saturdays in that date range';
  20. ?>

Esto no quita que quiera saber como sacar un array de un rango de datos mediante un for o similar, que me podria venir muy bien saberlo para un futuro :P

Última edición por noruas; 04/10/2012 a las 12:41

Etiquetas: coincidencias
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 18:18.