2014-03-04 46 views
0

我想填充刻鐘時間的下拉列表。關鍵是選項值,而值是選項文本。使用array_map構建數組的時間 - 關聯數組的可能性?

private function quarterHourTimes() { 
     $formatter = function ($time) { 
      return date('g:ia', $time); 
     }; 
     $quarterHourSteps = range(25200, 68400, 900); 

     return array_map($formatter, $quarterHourSteps); 
} 

問題是,上述函數的工作原理,但似乎不工作作爲關聯數組。這個問題有沒有優雅的解決方案?

爲重點,我希望有時間以下列格式date('H:i', $time);

例如陣列應該是這樣的:

$times = 
[ 
    ['07:00' => '7:00am'], 
    ['07:15' => '7:15am'], 
    ['07:30' => '7:30am'], 
    ['07:45' => '7:45am'], 
    ['08:00' => '8:00am'], 
    ['08:15' => '8:15am'], 
    ... 
]; 

我的解決方案 - 轉儲array_map:

private function myQuarterHourTimes() 
{ 


    $quarterHourSteps = range(25200, 68400, 900); 

    $times = array(); 
    foreach(range($quarterHourSteps as $time) 
    { 
     $times[date('H:i', $time)] = date('g:ia', $time); 
    } 

    return $times; 
} 
+1

小心單詞「遞歸」:'array_map()'適用你把它給你提供了數組中每個元素的功能。如果你提供的回調函數本身沒有調用,那麼就沒有遞歸。 – crennie

+1

@crennie - 你是對的,很好被發現。 - 我之前嘗試過遞歸地做這件事,而這個問題涉及遞歸地做這件事。爲了解決這個問題,我刪除了遞歸,但忘了更改標題。我的錯。 – Gravy

回答

1

你的功能可以被容易地替換:

$result = array_reduce(range(25200, 68400, 900), function(&$cur, $x) 
{ 
    $cur[date('H:i', $x)] = date('g:ia', $x); 
    return $cur; 
}, []); 

結果在像this這樣的關聯數組中。

0

我想你正在尋找這樣的事情

<?php 
function formatter($time) { 
      return array (date('g:i', $time) => date('g:ia', $time)); 
     }; 

function quarterHourTimes() { 

     $quarterHourSteps = range(25200, 68400, 900); 

     return array_map('formatter', $quarterHourSteps); 
} 

print_r (quarterHourTimes()); 

?> 

Demo

+0

你的功能是偉大的 - 但數組鍵是錯誤的。需要以下輸出。我想我無法爲此使用array_map。 http://codepad.org/rGffpsho – Gravy