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 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
phpize的深入理解
Jun 03 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
PHP执行普通shell命令流程解析
Aug 24 PHP
微信小程序和php的登录实现
Apr 01 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中mysql模块部分功能的简单封装
2011/09/30 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
jquery密码强度校验
2015/12/02 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python读大数据txt
2016/03/28 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
python如何调用php文件中的函数详解
2020/12/29 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
员工三分钟演讲稿
2014/08/19 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
Python装饰器的练习题
2021/11/23 Python
MySQL慢查询优化解决问题
2022/03/17 MySQL
教你如何用cmd快速登录服务器
2022/06/10 Servers