PHP 函数执行效率的小比较


Posted in PHP onOctober 17, 2010

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

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 
)
PHP 相关文章推荐
用PHP发电子邮件
Oct 09 PHP
?繁体转换的class
Oct 09 PHP
解析php中heredoc的使用方法
Jun 17 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
10款实用的PHP开源工具
Oct 23 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
PHP类中Static方法效率测试代码
Oct 17 #PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 #PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 #PHP
php中去除所有js,html,css代码
Oct 12 #PHP
PHP入门学习笔记之一
Oct 12 #PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 #PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 #PHP
You might like
php 常用字符串函数总结
2008/03/15 PHP
使用php来实现网络服务
2009/09/15 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
在Python中使用第三方模块的教程
2015/04/27 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python正规则表达式学习指南
2016/08/02 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Pandas分组与排序的实现
2019/07/23 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
2014年优秀党员材料
2014/12/18 职场文书
入党介绍人意见2015
2015/06/01 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书