PHP 函数执行效率的小比较

时间:2022-09-23 23:07:50

就是把原来的数组中的数都“拆”成“单”位的。 
下面是自己写的一个函数: 

复制代码代码如下:


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