使用 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;
}

您的函数可以很容易地替换为:

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

结果是这样的关联数组。

我想你正在寻找这样的东西

<?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());
?>

演示

最新更新