PHP 的这个函数array_map如何优化(如何传入参数)
程序员文章站
2022-06-13 17:04:20
...
/**
* @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
测试
$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
)
*/
问题
如何将 $format 传入到 array_map 当中
回复内容:
/**
* @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
测试
$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
)
*/
问题
如何将 $format 传入到 array_map 当中
return array_map(function ($time) use ($format) {
return date($format, $time);
}, range(strtotime($hisStart), strtotime($hisEnd), $range));
关键字:闭包
最优解当然是像 @picasso250 一样用use了
return array_map(function ($t) use ($f) {
return date($f, $t);
}, range(strtotime($s), strtotime($e), $r));
如果用不了use关键字的话低版本的话还可以用global:
$format = "H:i:s";
function fm($t){
global $format;
return date($format, $time);
}
array_map('fm', range(strtotime($hisStart), strtotime($hisEnd), $range));
当然用Class写这个也是可以的,就是看起来特别麻烦...
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();
好吧,我大概只是来提供不同的解法的...