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中使用Sockets 从Usenet中获取文件
Jan 10 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php 定界符格式引起的错误
May 24 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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
Zerg兵种介绍
2020/03/14 星际争霸
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
python中异常报错处理方法汇总
2016/11/20 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
师范生自荐信范文
2013/10/06 职场文书
好的自荐信的要求
2013/10/30 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
低碳环保口号
2014/06/12 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年教师节慰问信
2015/03/23 职场文书
总经理司机岗位职责
2015/04/10 职场文书
毕业设计致谢语
2015/05/14 职场文书
家长反馈意见及建议
2015/06/03 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis