3

私はこのフォーラムに不慣れで、助けを求めたいと思っていました。最近、Web サイトのグループに 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

内部に多くのifを含むこの配列をループしようとしました。ですから、おそらくほとんどの人は、このままでは何も達成できないことを理解できるでしょう。これが私のコードです。$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;
    }
}
4

1 に答える 1

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>
于 2013-04-12T19:49:24.697 に答える