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 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
PHP之uniqid()函数用法
Nov 03 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
PHP sdk实现在线打包代码示例
Dec 09 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/24 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
javascript 面向对象编程 function也是类
2009/09/17 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
Python中replace方法实例分析
2014/08/20 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
golang为什么要统一错误处理
2022/04/03 Golang
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python