2011-05-06 32 views
11

我該如何編碼PHP中的函數(使用CodeIgniter)來將具有相似商店開放時間的日期合併在一起。例如,如果我們有:將開放時間相似的日子結合起來

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

我想要的代碼,將其簡化爲:

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

如何做到這一點沒有一長串的if/else或case IFS?我用笨..

+0

你在哪裏保持DEFS?在以天爲關鍵字和小時作爲值的數組中? – 2011-05-06 05:12:20

回答

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

很好地完成。你可以用'$ summary [$ hours] [] = $ day;'替換整個if/else語句。 – Austin 2011-05-06 09:06:53

+1

當他們決定在週三晚些時候開放時會發生什麼? – gilly3 2011-06-28 23:36:09

+0

呃,實際上這會搞砸結果 – peaceman 2011-06-29 09:07:26

相關問題