2011-05-23 54 views
-1

任何人有任何的快捷方式是:串聯小時陣列成一個友好的字符串

我有一個小時的陣列,說是這樣的:

$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

目前還不清楚如何形成'4 am-7am'這樣的間隔。 '上午7點'從哪裏來的? – 2011-05-23 06:10:41

+0

問題不明確。 – 2011-05-23 06:11:42

+0

這些是時鐘。想象一下,從這樣的角度來看,它確實是早上6點59分。對我而言,'早上7點'是最有意義的。 – 2011-05-23 06:12:09

回答

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); 
+0

祝你好運Mr.Green。 – Bastardo 2011-05-23 07:29:17

1

這將工作一種享受。只有大約4行。我不」想你可以由於‘上午’,‘晚上’和%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"; 
?> 
+0

這輸出4 am-5am; 6 am-9am; 10 am-2pm; – 2011-05-23 06:23:08

+0

看起來很棒。甚至沒有意識到你能做到這一點。但是,它有錯誤的答案。應該是:'上午4點到上午7點; 9 am-11am; 2 pm-3pm';我認爲它需要做一個休息檢測。 – 2011-05-23 06:31:19

+0

我終於看到你在做什麼... OPS,這不是一個很好問的問題,grrrr .... – 2011-05-23 11:58:22