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
phpmyadmin3 安装配置图解教程
Mar 29 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
PHP会话处理的10个函数
Aug 11 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
golang与PHP输出excel示例
Jul 22 PHP
PHP处理Ajax请求与Ajax跨域问题
Feb 13 PHP
php 静态属性和静态方法区别详解
Apr 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延迟静态绑定示例分享
2014/06/22 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP自定义错误用法示例
2016/09/28 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
django rest framework 自定义返回方式
2020/07/12 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
某公司.Net方向面试题
2014/04/24 面试题
应聘教师自荐信
2013/10/12 职场文书
工程安全员岗位职责
2014/03/09 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
python游戏开发之pygame实现接球小游戏
2022/04/22 Python
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技