任何人都有这方面的捷径:
我有几个小时,比如说:
$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。如果有帮助我可以画一幅画
有人有任何方便的快捷方式吗? :)
答案 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);