> 백엔드 개발 > PHP 튜토리얼 > PHP 的这个函数array_map如何优化(如何传入参数)

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-06 20:41:59
원래의
1712명이 탐색했습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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 </code>

로그인 후 복사
로그인 후 복사

测试

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<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>

로그인 후 복사
로그인 후 복사

问题

1

2

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

</code>

로그인 후 복사
로그인 후 복사

回复内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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 </code>

로그인 후 복사
로그인 후 복사

测试

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<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>

로그인 후 복사
로그인 후 복사

问题

1

2

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

</code>

로그인 후 복사
로그인 후 복사

1

2

3

4

<code>    return array_map(function ($time) use ($format) {

        return date($format, $time);

    }, range(strtotime($hisStart), strtotime($hisEnd), $range));

</code>

로그인 후 복사

关键字:闭包

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

1

2

3

4

<code> return array_map(function ($t) use ($f) {

    return date($f, $t);

}, range(strtotime($s), strtotime($e), $r));

</code>

로그인 후 복사

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

1

2

3

4

5

6

7

<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写这个也是可以的,就是看起来特别麻烦...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<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>

로그인 후 복사

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

관련 라벨:
php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿