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截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
php上传文件问题汇总
Jan 30 PHP
PHP中的一些常用函数收集
May 26 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
php cli模式下获取参数的方法
May 05 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
详解php协程知识点
Sep 21 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
浅析PHP开发规范
2018/02/05 PHP
js的正则test,match,exec详细解析
2014/01/29 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python安装以及IDE的配置教程
2015/04/29 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
Python抓取百度查询结果的方法
2015/07/08 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
代码详解django中数据库设置
2019/01/28 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
python re的findall和finditer的区别详解
2020/11/15 Python
职称自我鉴定
2013/10/15 职场文书
《老山界》教学反思
2014/04/08 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
高考学习决心书
2015/02/04 职场文书
活着观后感
2015/06/03 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript