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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
Sep 15 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 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新手上路(五)
2006/10/09 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
php计算一个文件大小的方法
2015/03/30 PHP
js验证表单第二部分
2006/11/25 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python的time模块中的常用方法整理
2015/06/18 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python中交换两个元素的实现方法
2018/06/29 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
浅谈Python 参数与变量
2020/06/20 Python
Python如何获取文件路径/目录
2020/09/22 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
医学会议开幕词
2016/03/03 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
Vue和Flask通信的实现
2021/05/19 Vue.js