• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 的这个函数array_map如何优化(如何传入参数)

php 搞代码 4年前 (2022-01-25) 17次浏览 已收录 0个评论
文章目录[隐藏]
<code>/** * @param string $hisStart * @param string $hisEnd * @param int    $range * @param string $format * * @return array */function createHisRange($hisStart = '00:00:00', $hisEnd = '23:59:59', $range = 3600, $format = 'H:00:00'){    $t1 = strtotime($hisStart);    $t2 = strtotime($hisEnd);    $arrHis = array();    while($t1 < $t2){        $arrHis[] = date($format,$t1);        $t1 += $range;    }    return $arrHis;//    return array_map(function ($time) {//        return date($format, $time);//    }, range(strtotime($hisStart), strtotime($hisEnd), $range));}</code>

测试

<code>$s = createHisRange();print_r($s);/*Array(    [0] => 00:00:00    [1] => 01:00:00    [2] => 02:00:00    [3] => 03:00:00    [4] => 04:00:00    [5] => 05:00:00    [6] => 06:00:00    [7] => 07:00:00    [8] => 08:00:00    [9] => 09:00:00    [10] => 10:00:00    [11] => 11:00:00    [12] => 12:00:00    [13] => 13:00:00    [14] => 14:00:00    [15] => 15:00:00    [16] => 16:00:00    [17] => 17:00:00    [18] => 18:00:00    [19] => 19:00:00    [20] => 20:00:00    [21] => 21:00:00    [22] => 22:00:00    [23] => 23:00:00)*/</code>

问题

<code>如何将 $format 传入到 array_map 当中</code>

回复内容:

<code>/** * @param string $hisStart * @param string $hisEnd * @param int    $range * @param string $format * * @return array */function createHisRange($hisStart = '00:00:00', $hisEnd = '23:59:59', $range = 3600, $format = 'H:00:00'){    $t1 = strtotime($hisStart);    $t2 = strtotime($hisEnd);    $arrHis = array();    while($t1 < $t2){        $arrHis[] = date($format,$t1);        $t1 += $range;    }    return $arrHis;//    return array_map(function ($time) {//        return date($format, $time);//    }, range(strtotime($hisStart), strtotime($hisEnd), $range));}</code>

测试

<code>$s = createHisRange();print_r($s);/*Array(    [0] => 00:00:00    [1] => 01:00:00    [2] => 02:00:00    [3] => 03:00:00    [4] => 04:00:00    [5] => 05:00:00    [6] => 06:00:00    [7] => 07:00:00    [8] => 08:00:00    [9] => 09:00:00    [10] => 10:00:00    [11] => 11:00:00    [12] => 12:00:00    [13] => 13:00:00    [14] => 14:00:00    [15] => 15:00:00    [16] => 16:00:00    [17] => 17:00:00    [18] => 18:00:00    [19] => 19:00:00    [20] => 20:00:00    [21] => 21:00:00    [22] => 22:00:00    [23] => 23:00:00)*/</code>

问题

<code>如何将 $format 传入到 array_map 当中</code>

<code>    return array_map(function ($time) use ($format) {        return date($format, $time);    }, range(strtotime($hisStart), strtotime($hisEnd), $range));</code>

关键字:闭包

来4源gaodaimacom搞#代%码*网搞代gaodaima码

最优解当然是像 @picasso250 一样用use了

<code> return array_map(function ($t) use ($f) {    return date($f, $t);}, range(strtotime($s), strtotime($e), $r));</code>

如果用不了use关键字的话低版本的话还可以用global:

<code>$format = "H:i:s";function fm($t){    global $format;    return date($format, $time);}array_map('fm', range(strtotime($hisStart), strtotime($hisEnd), $range));</code>

当然用Class写这个也是可以的,就是看起来特别麻烦…

<code>Class hisRange {    public $s, $e, $r, $f;    function __constructor($s= '00:00:00', $e= '23:59:59', $r= 3600, $f= 'H:00:00') {        $this->s = strtotime($s);        $this->e = strtotime($e);        $this->r = $r;        $this->f = $f;    }    function run() {         return array_map(array($this, 'fm'), range($this->s, $this->e, $this->r));    }    function fm($t) {        return date($this->f, $t);    }}$range = new hisRange();$s = $range->run();</code>

好吧,我大概只是来提供不同的解法的…


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 的这个函数array_map如何优化(如何传入参数)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址