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:从新闻组中获取文章
Oct 09 PHP
pw的一个放后门的方法分析
Oct 08 PHP
php基础学习之变量的使用
Jun 09 PHP
php变量作用域的深入解析
Jun 03 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
对Session和Cookie的区分与解释
2007/03/16 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
浅析vue-router原理
2018/10/19 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
Python FTP操作类代码分享
2014/05/13 Python
python刷投票的脚本实现代码
2014/11/08 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
python regex库实例用法总结
2021/01/03 Python
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
《搭石》教学反思
2014/04/07 职场文书
法制宣传口号
2014/06/16 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
工资收入证明
2014/10/07 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
mysql 排序失效
2022/05/20 MySQL