PHP 函数执行效率的小比较

  就是把原来的数组中的数都“拆”成“单”位的。

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

  

复制代码 代码如下:

  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;

  }

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

  

复制代码 代码如下:

  //测试数组

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

  var_dump(splitStrToArray_mine($data));

  输出结果为:

  

复制代码 代码如下:

  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"

  }

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

  

复制代码 代码如下:

  //标准函数

  function splitStrToArray($array)

  {

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

  }

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

  

复制代码 代码如下:

  //测量时间的函数

  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 . " 倍!";

  来看看输出结果:

  自己的函数调用运行时间为: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()

  

复制代码 代码如下:

  <?php

  $str = "Hello Friend";

  $arr1 = str_split($str);

  $arr2 = str_split($str, 3);

  print_r($arr1);

  print_r($arr2);

  ?>

  Output may look like:

  

复制代码 代码如下:

  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

  )