将一个小时数组连接成一个友好的字符串

时间:2011-05-23 06:07:56

标签: php time

任何人都有这方面的捷径:

我有几个小时,比如说:

$hours = array(4,5,6,9,10,14);

我希望将其转换为漂亮的字符串,格式如下:

$ret = '4am-7am; 9am-11am; 2pm-3pm';

这是一个24小时制的时钟小时数组。阵列中的4代表0400小时(凌晨4点)。 14点是1400小时(下午2点)。我希望其余的都是自我解释的。有多个中断,因此阵列中不包括7AM和8AM。因为这些是时钟时间,所以这些是后沿包含...因为指定了6AM,其中包括6AM的整个小时,结束于上午6:59。从用户的角度来看,这确实意味着7AM。如果有帮助我可以画一幅画

有人有任何方便的快捷方式吗? :)

2 个答案:

答案 0 :(得分:1)

这将是一种享受。只有大约4行。由于“am”,“pm”和%12

,我不认为你可以做得更轻松
<?php
$hours = array(4,5,6,9,10,14);
$time = "";
for($i=0, $j=1; $i<count($hours); $i+=2, $j+=2){        
    $suffix1 = $hours[$i] <12?"am":"pm";   
    $suffix2 = $hours[$j] <12?"am":"pm";
    $time .= $hours[$i].$suffix1."-".($hours[$j]%12).$suffix2."; ";   
}
print $time."\n";
?> 

答案 1 :(得分:1)

好的,不是很漂亮,但这是我提出的解决方案:很高兴听到有人有更清洁的解决方案。 :)

function formatHour($hour){
    $pNormalizedHour = $hour % 12;
    $pNormalizedHour = ($pNormalizedHour == 0) ? 12 : $pNormalizedHour;
    return  $pNormalizedHour.($hour < 12 ? 'am' : 'pm');
}
function timeArrToFriendly($hours){
   // cache this, since we'll be asking for it potentially dozens of times.
   $pArrCount = count($hours);
   $retVal = '';
   for ($i=0; $i < $pArrCount; $i++)
   {
       $retVal .= ($retVal == '') ? '' : '; ';
       $retVal .= formatHour($hours[$i]);
       if (($i >= $pArrCount-1) || (($hours[$i + 1]) != ($hours[$i] + 1))){
          $retVal .= '-'.formatHour($hours[$i] + 1);
          continue;         
       }
       for ($j = $i+1; $j < $pArrCount; $j++){
           if (($j >= $pArrCount-1) || ($hours[$j + 1] != $hours[$j] + 1)){
               $retVal .= '-'.formatHour($hours[$j] +1);
               $i = $j;
               break;
           }
       }
   }
   return $retVal;
}
// test string.  Correct output:
//  => 4am-7am; 9am-11am; 12pm-1pm; 2pm-3pm; 6pm-10pm
$hours = array(4,5,6,9,10,12,14,18,19,20,21);
echo timeArrToFriendly($hours);