2011-05-06 10 views
11

¿Cómo podría codificar una función en PHP (con CodeIgniter) para combinar días con horarios similares de una tienda juntos? Por ejemplo, si tenemos:Combinar días en los que los horarios de apertura son similares

Mon 9am-5pm 
Tue 9am-5pm 
Wed 9am-5pm 
Thu 9am-5pm 
Fri 9am-5pm 
Sat 9am-7pm 
Sun 9am-7pm 

Quiero que el código para simplificar a:

Mon-Fri 9am-5pm 
Sat-Sun 9am-7pm 

¿Cómo hacer esto sin una larga lista de if/else o de caso pasaría si? Estoy usando CodeIgniter ..

+0

¿Dónde están manteniendo el defs? En una matriz con días como las claves y las horas como valores? –

Respuesta

11
<?php 
$openHours = array(
    'Mon' => '9am-5pm', 
    'Tue' => '9am-5pm', 
    'Wed' => '9am-9pm', 
    'Thu' => '9am-5pm', 
    'Fri' => '9am-5pm', 
    'Sat' => '9am-7pm', 
    'Sun' => '9am-7pm' 
); 

$summaries = array(); 
foreach ($openHours as $day => $hours) { 
    if (count($summaries) === 0) { 
     $current = false; 
    } else { 
     $current = &$summaries[count($summaries) - 1]; 
    } 
    if ($current === false || $current['hours'] !== $hours) { 
     $summaries[] = array('hours' => $hours, 'days' => array($day)); 
    } else { 
     $current['days'][] = $day; 
    } 
} 

foreach ($summaries as $summary) { 
    if (count($summary['days']) === 1) { 
     echo reset($summary['days']) . ' ' . $summary['hours'] . PHP_EOL; 
    } else { 
     echo reset($summary['days']) . '-' . end($summary['days']) . ' ' . $summary['hours'] . PHP_EOL; 
    } 
} 

codepad sample

+0

Bien hecho. Puede reemplazar toda la instrucción if/else simplemente con '$ summary [$ hours] [] = $ day;'. – Austin

+1

¿Qué sucede cuando deciden permanecer abiertos más tarde los miércoles? – gilly3

+0

uhm, en realidad esto arruinaría el resultado – peaceman

Cuestiones relacionadas