PHP 函数执行效率的小比较

开发技术 作者: 2024-08-04 02:10:01
要求写一个自定义函数,使 $data = array(12, 43, 87, 45) => $data = array(1, 2, 4, 3, 8, 7, 4, 5);

就是把原来的数组中的数都“拆”成“单”位的。
下面是自己写的一个函数:
<div class="codetitle"><a style="CURSOR: pointer" data="88959" class="copybut" id="copybut88959" onclick="doCopy('code88959')"> 代码如下:

<div class="codebody" id="code88959">
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;
}

测试了一下,还是可以执行的,如下调用:
<div class="codetitle"><a style="CURSOR: pointer" data="80673" class="copybut" id="copybut80673" onclick="doCopy('code80673')"> 代码如下:
<div class="codebody" id="code80673">
//测试数组
$data = array(12,43,87,45,98,74,83,67,12);
var_dump(splitStrToArray_mine($data));

输出结果为:
<div class="codetitle"><a style="CURSOR: pointer" data="58647" class="copybut" id="copybut58647" onclick="doCopy('code58647')"> 代码如下:
<div class="codebody" id="code58647">
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"
}

虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:
<div class="codetitle"><a style="CURSOR: pointer" data="98168" class="copybut" id="copybut98168" onclick="doCopy('code98168')"> 代码如下:
<div class="codebody" id="code98168">
//标准函数
function splitStrToArray($array)
{
return str_split(implode("",$array));
}

于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:
<div class="codetitle"><a style="CURSOR: pointer" data="79605" class="copybut" id="copybut79605" onclick="doCopy('code79605')"> 代码如下:<div class="codebody" id="code79605">
//测量时间的函数
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,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
";
echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S
";
$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] )
<div class="codetitle"><a style="CURSOR: pointer" data="61852" class="copybut" id="copybut61852" onclick="doCopy('code61852')"> 代码如下:<div class="codebody" id="code61852">
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()
<div class="codetitle"><a style="CURSOR: pointer" data="88555" class="copybut" id="copybut88555" onclick="doCopy('code88555')"> 代码如下:<div class="codebody" id="code88555">
<?PHP
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str,3);
print_r($arr1);
print_r($arr2);
?>

Output may look like:
<div class="codetitle"><a style="CURSOR: pointer" data="8445" class="copybut" id="copybut8445" onclick="doCopy('code8445')"> 代码如下:<div class="codebody" id="code8445">
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
)

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_56048.html
函数 执行效率