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 mysql数据库操作分页类
Jun 04 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
php中switch语句用法详解
Aug 17 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
php中对象引用和复制实例分析
Aug 14 PHP
PHP扩展类型及安装方式解析
Apr 27 PHP
PHP哈希表实现算法原理解析
Dec 11 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连接oracle数据库的核心步骤
2016/05/26 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
vue实现购物车小案例
2019/09/27 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
Python中static相关知识小结
2018/01/02 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python版本单链表实现代码
2018/09/28 Python
详解python Todo清单实战
2018/11/01 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
python设置中文界面实例方法
2020/10/27 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
自我推荐书
2013/12/04 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
六一儿童节标语
2014/10/08 职场文书
2014年销售工作总结范文
2014/12/01 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记