我是这个论坛的新手,想要求帮助。最近我必须在一组网站中实现schema.org/LocalBusiness微数据,但问题是我需要动态添加它。在开放时间到来之前,一切都很容易。 因此架构希望显示小时数的方式是:
<meta itemprop="openingHours" content="Mo-Sa 11:00-14:30">Mon-Sat 11am - 2:30pm
<meta itemprop="openingHours" content="Mo-Th 17:00-21:30">Mon-Thu 5pm - 9:30pm
<meta itemprop="openingHours" content="Fr-Sa 17:00-22:00">Fri-Sat 5pm - 10:00pm
我设法只分别显示每天的开放时间,但我需要将它们显示为上面的代码。
我尝试这样做是为了从开放时间表格中获取数据到数组。例如:
$days = array('mo' => '13:00-20:00',
'tu' => '13:00-20:00',
'we' => '13:00-20:00',
'th' => '11:00-18:00',
'fr' => '11:00-18:00',
'sa' => '15:00-22:00',
'su' => '13:00-20:00',);
我需要从这个数组中显示的结果是:
<meta itemprop="openingHours" content="Mo-We 13:00-20:00">Mon-We 13:00-20:00
<meta itemprop="openingHours" content="Th-Fr 11:00-18:00">Th-Fr 11:00-18:00
<meta itemprop="openingHours" content="Sa 15:00-22:00">Sat 15:00-22:00
<meta itemprop="openingHours" content="Su 13:00-20:00">Sun 13:00-20:00
并尝试使用许多ifs循环此数组。所以,大概你们大多数人都可以想到这样的事情,我不会做任何事情。这是我的代码。我没有测试过这段代码,因为我无法弄清楚如何检索$ last_key's_value_equal。希望任何人都能理解我,因为我的解释不是很好,但如果有人可以提供帮助,我将不止感激。
foreach($day as $key=>$value){
if($value == next($day)){
if($value == next($day)){
if($value == next($day)){
if($value == next($day)){
if($value == next($day)){
if($value == next($day)){
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
}else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
else{
$opening_hours .= $key.'-'.$last_key's_value_equal.' '.$value;
}
}
答案 0 :(得分:2)
保留一组连续的组。当您遍历$days
时,请检查最后一项是否具有相同的小时数。如果是,请将该日添加到同一组;如果没有,请创建一个新组。
,例如,此函数应用于$days
数组时:
function group_contiguous_values($arr) {
$groups = array();
foreach ($arr as $k => $v) {
$lastidx = count($groups)-1;
if (isset($groups[$lastidx][$v])) {
$groups[$lastidx][$v][] = $k;
} else {
$groups[] = array($v => array($k));
}
}
return $groups;
}
会产生这样的结果:
array(
array('13:00-20:00' => array('mo', 'tu', 'we')),
array('11:00-18:00' => array('th', 'fr')),
array('15:00-22:00' => array('sa')),
array('13:00-20:00' => array('su')),
);
从那里获得你想要的人类可读版本只是肘部油脂的问题。此代码将处理itemprop 值:
$time_templ = '<time itemprop="openingHours" datetime="%s %s">%s %s</time>'."\n";
foreach ($business_hours as $group) {
list($hours, $days) = each($group);
list($open, $close) = explode('-', $hours, 2);
$firstday = ucfirst($days[0]);
$lastday = (count($days)>1) ? ucfirst(end($days)) : null;
$meta_days = $firstday;
if ($lastday) {
$meta_days .= "-$lastday";
}
$meta_hours = $hours;
printf($time_templ, $meta_days, $meta_hours, $meta_days, $meta_hours);
}
打印哪些:
<time itemprop="openingHours" datetime="Mo-We 13:00-20:00">Mo-We 13:00-20:00</time>
<time itemprop="openingHours" datetime="Th-Fr 11:00-18:00">Th-Fr 11:00-18:00</time>
<time itemprop="openingHours" datetime="Sa 15:00-22:00">Sa 15:00-22:00</time>
<time itemprop="openingHours" datetime="Su 13:00-20:00">Su 13:00-20:00</time>