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中随机显示图片的函数代码
Jun 23 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 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中使用CURL获取页面title例子
2015/01/07 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
pandas的resample重采样的使用
2020/04/24 Python
基于python实现对文件进行切分行
2020/04/26 Python
Django在Model保存前记录日志实例
2020/05/14 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
情侣吵架检讨书
2014/02/05 职场文书
怎么写自荐书范文
2014/02/12 职场文书
校园演讲稿汇总
2014/05/21 职场文书
公司管理制度范本
2015/08/03 职场文书