如果小时数相同并且天数是连续的,则对天数进行分组奇连字符否则逗号
Grouping Days if hours are same and if days are consecutive add hypenate else comma
我有一个代码,可以将商店营业时间相似的日子合并在一起。例如,如果我们有:
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v)
$array[$v][] = $k;
foreach($array as $time => $days)
echo implode(",", $days) . " " . $time . PHP_EOL;
?>
结果如下所示。
Mon,Tue,Wed 9am-7pm
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm
我想要什么?
如果日期是连续的,我想用连字符连接,如果不是连续的,我想在下面的示例中添加逗号。
结果应该是这样
Mon-Wed 9am-7pm // Hyphenate as days are consecutive and more than 2
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm // Adds comma as there are only 2
试试这个。
更新 2
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-10pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
$new_array = array();
foreach($openHours as $key => $value)
{
if(in_array($value,$new_array))
{
$key_new = array_search($value, $new_array);//to get the key of element
unset($new_array[$key_new]); //remove the element
$key_new = $key_new.','.$key; //updating the key
$new_array[$key_new] = $value; //inserting new element to the key
}
else
{
$new_array[$key] = $value;
}
}
foreach ($new_array as $days=>$time){
$daylist = explode(',',$days);
if ($time!='closed'){
if (count($daylist)>2){
$limit = count($daylist)-1;
$first = $daylist[0];
$last = $daylist[$limit];
//loop will go here.
if (date('D', strtotime('+'.$limit.' days', strtotime($first)))==$last){
echo $first.'-'.$last.' '.$time.'<br>';
} else {
$sep = '';
foreach ($daylist as $sepdays){
echo $sep.$sepdays;
$sep = ',';
}
echo ' '.$time.'<br>';
}
} else {
echo $days.' '.$time.'<br>';
}
} else {
$daylist = explode(',',$days);
foreach ($daylist as $sepdays){
echo $sepdays.' '.$time.'<br>';
}
}
}
?>
结果
Mon-Wed 9am-7pm
Fri closed
Thu,Sat,Sun 9am-10pm
你可以这样使用:
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v){
$array[$v][] = $k;
}
foreach($array as $time => $days){
if(count($days) > 2){ // if count more than two days
echo current($days)."-".end($days) . " " . $time . PHP_EOL."<br/>";
}
else{ // if normal like one or two days
echo implode(",", $days) . " " . $time . PHP_EOL."<br/>";
}
}
结果:
Mon-Wed 9am-7pm
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm
旁注:
如果您想将 Sat,Sun
用作 Sat-Sun
而不仅仅是条件 if(count($days) > 1){
.
更新 1:
例如,如果 Fri
和 Tue
关闭,这将起作用。
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => 'closed',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v){
$array[$v][] = $k;
}
foreach($array as $time => $days){
if(count($days) > 2 && $time != 'closed'){ // if count more than two days
echo current($days)."-".end($days) . " " . $time . PHP_EOL."<br/>";
}
elseif($time == 'closed'){ // if count more than two days
echo implode(" closed<br/>", $days) . " " . $time . PHP_EOL."<br/>";
}
else{ // if normal like one or two days
echo implode(",", $days) . " " . $time . PHP_EOL."<br/>";
}
}
?>
结果:
Mon,Wed 9am-7pm
Tue closed
Fri closed
Thu 9am-6pm
Sat,Sun 9am-10pm
我有一个代码,可以将商店营业时间相似的日子合并在一起。例如,如果我们有:
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v)
$array[$v][] = $k;
foreach($array as $time => $days)
echo implode(",", $days) . " " . $time . PHP_EOL;
?>
结果如下所示。
Mon,Tue,Wed 9am-7pm
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm
我想要什么?
如果日期是连续的,我想用连字符连接,如果不是连续的,我想在下面的示例中添加逗号。
结果应该是这样
Mon-Wed 9am-7pm // Hyphenate as days are consecutive and more than 2
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm // Adds comma as there are only 2
试试这个。
更新 2
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-10pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
$new_array = array();
foreach($openHours as $key => $value)
{
if(in_array($value,$new_array))
{
$key_new = array_search($value, $new_array);//to get the key of element
unset($new_array[$key_new]); //remove the element
$key_new = $key_new.','.$key; //updating the key
$new_array[$key_new] = $value; //inserting new element to the key
}
else
{
$new_array[$key] = $value;
}
}
foreach ($new_array as $days=>$time){
$daylist = explode(',',$days);
if ($time!='closed'){
if (count($daylist)>2){
$limit = count($daylist)-1;
$first = $daylist[0];
$last = $daylist[$limit];
//loop will go here.
if (date('D', strtotime('+'.$limit.' days', strtotime($first)))==$last){
echo $first.'-'.$last.' '.$time.'<br>';
} else {
$sep = '';
foreach ($daylist as $sepdays){
echo $sep.$sepdays;
$sep = ',';
}
echo ' '.$time.'<br>';
}
} else {
echo $days.' '.$time.'<br>';
}
} else {
$daylist = explode(',',$days);
foreach ($daylist as $sepdays){
echo $sepdays.' '.$time.'<br>';
}
}
}
?>
结果
Mon-Wed 9am-7pm
Fri closed
Thu,Sat,Sun 9am-10pm
你可以这样使用:
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => '9am-7pm',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v){
$array[$v][] = $k;
}
foreach($array as $time => $days){
if(count($days) > 2){ // if count more than two days
echo current($days)."-".end($days) . " " . $time . PHP_EOL."<br/>";
}
else{ // if normal like one or two days
echo implode(",", $days) . " " . $time . PHP_EOL."<br/>";
}
}
结果:
Mon-Wed 9am-7pm
Thu 9am-6pm
Fri closed
Sat,Sun 9am-10pm
旁注:
如果您想将 Sat,Sun
用作 Sat-Sun
而不仅仅是条件 if(count($days) > 1){
.
更新 1:
例如,如果 Fri
和 Tue
关闭,这将起作用。
<?php
$openHours = array(
'Mon' => '9am-7pm',
'Tue' => 'closed',
'Wed' => '9am-7pm',
'Thu' => '9am-6pm',
'Fri' => 'closed',
'Sat' => '9am-10pm',
'Sun' => '9am-10pm'
);
foreach($openHours as $k => $v){
$array[$v][] = $k;
}
foreach($array as $time => $days){
if(count($days) > 2 && $time != 'closed'){ // if count more than two days
echo current($days)."-".end($days) . " " . $time . PHP_EOL."<br/>";
}
elseif($time == 'closed'){ // if count more than two days
echo implode(" closed<br/>", $days) . " " . $time . PHP_EOL."<br/>";
}
else{ // if normal like one or two days
echo implode(",", $days) . " " . $time . PHP_EOL."<br/>";
}
}
?>
结果:
Mon,Wed 9am-7pm
Tue closed
Fri closed
Thu 9am-6pm
Sat,Sun 9am-10pm