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 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
Windows7下的php环境配置教程
Feb 28 PHP
WordPress自定义时间显示格式
Mar 27 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 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
一个分页的论坛
2006/10/09 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
php实现微信支付之退款功能
2018/05/30 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
jQuery 操作XML入门
2008/12/25 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
vue实现登录功能
2020/12/31 Vue.js
原生js实现无缝轮播图效果
2021/01/28 Javascript
python删除特定文件的方法
2015/07/30 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
python中的tcp示例详解
2018/12/09 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
生物技术专业毕业生求职信范文
2013/12/14 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
JS数组的常用方法整理
2021/03/31 Javascript