> 백엔드 개발 > PHP 튜토리얼 > 分拆数组元素的函数效率比较与分析_PHP教程

分拆数组元素的函数效率比较与分析_PHP教程

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-13 10:33:31
원래의
792명이 탐색했습니다.

有这么一个需求,一个数组$data = array(12, 43, 87, 45),要求写一个自定义函数,将其数组元素的数字单个拆开,最后形成的数组如下:$data = array(1, 2, 4, 3, 8, 7, 4, 5)。就是把原来的数组中的数都“拆”成“单”位的。

下面是自己写的一个函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

function splitStrToArray_mine($array)

{

    $new_array = array();

    foreach($array as $value)

    {

        $value = (string)$value;

        $len = strlen($value);

        for($i = 0; $i < $len; $i ++){

            array_push($new_array, $value{$i});

        }

    }

    return $new_array;

}

로그인 후 복사

测试了一下,还是可以执行的,如下调用:

1

2

3

//测试数组

$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12);

var_dump(splitStrToArray_mine($data));

로그인 후 복사

输出结果为:

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

35

36

37

38

array(18) {

  [0]=>

  string(1) "1"

  [1]=>

  string(1) "2"

  [2]=>

  string(1) "4"

  [3]=>

  string(1) "3"

  [4]=>

  string(1) "8"

  [5]=>

  string(1) "7"

  [6]=>

  string(1) "4"

  [7]=>

  string(1) "5"

  [8]=>

  string(1) "9"

  [9]=>

  string(1) "8"

  [10]=>

  string(1) "7"

  [11]=>

  string(1) "4"

  [12]=>

  string(1) "8"

  [13]=>

  string(1) "3"

  [14]=>

  string(1) "6"

  [15]=>

  string(1) "7"

  [16]=>

  string(1) "1"

  [17]=>

  string(1) "2"

}

로그인 후 복사

虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:

1

2

3

4

5

//标准函数

function splitStrToArray($array)

{

    return str_split(implode("", $array));

}

로그인 후 복사

于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:

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

35

36

37

38

39

//测量时间的函数

function microtime_float()

{

    list($usec, $sec) = explode(" ", microtime());

    return ((float)$usec + (float)$sec);

}

//自定义函数

function splitStrToArray_mine($array)

{

    $new_array = array();

    foreach($array as $value)

    {

        $value = (string)$value;

        $len   = strlen($value);

        for($i = 0; $i < $len; $i ++){

            array_push($new_array, $value{$i});

        }

    }

    return $new_array;

}

//标准函数

function splitStrToArray($array)

{

    return str_split(implode("", $array));

}

//测试数组

$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12);

//开始测试

$mine_start = microtime_float();

splitStrToArray_mine($data);

$mine_end   = microtime_float();

//标准函数调用

$sta_start = microtime_float();

splitStrToArray($data);

$sta_end   = microtime_float();

echo "自己的函数调用运行时间为:" . (float)($mine_end - $mine_start) . " S <br>";

echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S <br>";

$multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start));

echo "前者是后者的:" . $multiple . " 倍!";

로그인 후 복사

来看看输出结果:

1

2

3

自己的函数调用运行时间为:9.3936920166E-005 S

标准的函数调用运行时间为:2.69412994385E-005 S

前者是后者的:3 倍!

로그인 후 복사

多次刷新页面的话,可以发现标准函数的执行效率基本上是自己的函数的 3 倍!当然,标准的函数中使用了 PHP 的内置函数: str_split(),implode(),所以要比自己写函数快得多,对 str_split() 函数没有印象?来看看手册解释:

str_split -- Convert a string to an array(将一个字符串转换成数组)

函数描述:

array str_split ( string string [, int split_length] )

Converts a string to an array. If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length.

FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string, the entire string is returned as the first (and only) array element.

例 1. Example uses of str_split()

1

2

3

4

5

6

7

<?php

$str = "Hello Friend";

$arr1 = str_split($str);

$arr2 = str_split($str, 3);

print_r($arr1);

print_r($arr2);

?>

로그인 후 복사

程序运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Array

(

    [0] => H

    [1] => e

    [2] => l

    [3] => l

    [4] => o

    [5] =>

    [6] => F

    [7] => r

    [8] => i

    [9] => e

    [10] => n

    [11] => d

)

Array

(

    [0] => Hel

    [1] => lo

    [2] => Fri

    [3] => end

)

로그인 후 복사

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752468.htmlTechArticle有这么一个需求,一个数组$data = array(12, 43, 87, 45),要求写一个自定义函数,将其数组元素的数字单个拆开,最后形成的数组如下:$data =...
관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿