2014-03-04 2 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