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开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
简单的cookie计数器实现源码
Jun 07 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
PHP implode()函数用法讲解
Mar 08 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 db类库进行数据库操作
2009/03/19 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue实现图片上传功能
2020/05/28 Javascript
python 写的一个爬虫程序源码
2016/02/28 Python
python实现textrank关键词提取
2018/06/22 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
铁路个人事迹材料
2014/01/30 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
应聘教师自荐书
2014/06/16 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
检讨书范文
2019/04/16 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python
Python中itertools库的四个函数介绍
2022/04/06 Python