在工作日使用连字符分组不使用i18N

时间:2016-11-22 06:36:34

标签: php html arrays

我正在制作一个用于显示开放时间的片段,它在英语中工作正常,当我将数组的键更改为另一种语言时,它不会对字母进行连字,而是用逗号分隔。

我做错了什么?

下面是带有2个数组的PHP代码,其中1个注释为英文,工作正常。另一个是工作日的意大利语langugage

    <?php
    /*
    // english weekdays
    $openHours = array(
        'Mon' => '9am-7pm',
        'Tue' => '9am-7pm',
        'Wed' => '9am-7pm',
        'Thu' => '9am-10pm',
        'Fri' => 'closed',
        'Sat' => '9am-10pm',
        'Sun' => '9am-10pm'
    );
    */
    // italian weekdays
    $openHours = array(
        'lunedì' => '9am-7pm',
        'martedì' => '9am-7pm',
        'mercoledì' => '9am-7pm',
        'giovedì' => '9am-10pm',
        'venerdì' => 'closed',
        'sabato' => '9am-10pm',
        'domenica' => '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>';
                }
        }

    }
    ?>

RESULT 目前的结果是用意大利语获得的。

lunedì,martedì,mercoledì 9am-7pm
venerdì closed
giovedì,sabato,domenica 9am-10pm

预期结果 这就是我所期待的。

lunedì-mercoledì 9am-7pm
venerdì closed
giovedì,sabato,domenica 9am-10pm

1 个答案:

答案 0 :(得分:0)

您正在使用datestrtotime函数中的数组键进行比较,这两个函数都适用于英语。如果您需要在其他语言上执行此操作,则应使用setlocalestrftime,这将是一个复杂得多的过程。我的建议:

  1. 使用星期几(0-6)的数字表示,并在显示时,将数字替换为所需语言的值。

  2. 使用多维数组,包括星期几和开放时间。