I want to Group Days and Hours from this:
Mon : array(9:00AM - 11:00AM, 1:00pm-6pm)
Tue : array(8:00AM - 11:00AM,12:00pm-6pm)
Wed : array(9:00AM - 11:00AM, 1:00pm-6pm)
Thu : array(9:00AM - 11:00AM,1:00pm-6pm)
Fri : array(9:00AM - 12:00PM,1:00pm-6pm)
Sat : array(9:00AM - 7:00PM)
Sun : array(9:00AM - 12:00AM,1:00pm-6pm)
expected result:
Mon,wed,thu - 9:00AM - 11:00aM
1:00pm-6pm
tue : 8:00AM - 11:00am
12:00pm-6pm
fri,sun - 9:00AM - 12:00PM
1:00pm-6pm
sat: 9:00AM -7:00pm
Below is the code which I'm trying to work out. $open_Hours = array( 'Mon' => array('9:00AM - 11:00AM', '1:00pm-6pm'), 'Tue' =>array('8:00AM - 11:00AM', '12:00pm-6pm'), 'Wed' => array('9:00AM - 11:00AM', '1:00pm-6pm'), 'Thu' => array('9:00AM - 11:00AM','1:00pm-6pm'), 'Fri' => array('9:00AM - 12:00PM','1:00pm-6pm'), 'Sat' => array('9:00AM - 7:00PM'), 'Sun' => array('9:00AM - 12:00AM','1:00pm-6pm') ); foreach($open_Hours as $k => $v){ $open_array[$v][] = $k; } foreach($open_array as $time => $days){ echo implode(",", $days) . " " . $time . PHP_EOL; }
Here's what I came up with.
<?php
$open_Hours = array(
'Mon' => array('9:00AM - 11:00AM', '1:00pm - 6pm'),
'Tue' => array('8:00AM - 11:00AM', '12:00pm - 6pm'),
'Wed' => array('9:00AM - 11:00AM', '1:00pm - 6pm'),
'Thu' => array('9:00AM - 11:00AM','1:00pm - 6pm'),
'Fri' => array('9:00AM - 12:00PM','1:00pm - 6pm'),
'Sat' => array('9:00AM - 7:00PM'),
'Sun' => array('9:00AM - 12:00PM','1:00pm - 6pm')
);
$open_array = array();
foreach($open_Hours as $day => $periods) {
if(!isset($open_array[serialize($periods)]))
$open_array[serialize($periods)] = array();
$open_array[serialize($periods)][] = $day;
}
foreach($open_array as $times => $days) {
$times = unserialize($times);
$days = implode(",", $days);
for($i=0;$i<count($times); $i++) {
if($i == 0) {
echo $days;
echo str_repeat(' ', ((strlen($days)>12)?0:(12-strlen($days)));
} else {
echo str_repeat(' ', 12);
}
echo '- ' . $times[$i] . PHP_EOL;
}
}
Output:
Mon,Wed,Thu - 9:00AM - 11:00AM
- 1:00pm - 6pm
Tue - 8:00AM - 11:00AM
- 12:00pm - 6pm
Fri,Sun - 9:00AM - 12:00PM
- 1:00pm - 6pm
Sat - 9:00AM - 7:00PM
It makes use of serialize() as the array index so that you can group by multiple sets of hours properly.
Let me know if you need any further help or explanation.