• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 函数执行效率的小比较_php技巧

php 搞代码 4年前 (2022-01-26) 21次浏览 已收录 0个评论

就是把原来的数组中的数都“拆”成“单”位的。
下面是自己写的一个函数:

 <BR>function splitStrToArray_mine($array) <BR>{ <BR>$new_array = array(); <BR>foreach($array as $value) <BR>{ <BR>$value = (string)$value; <BR>$len = strlen($value); <BR>for($i = 0; $i < $len; $i ++){ <BR>array_push($new_array, $value{$i}); <BR>} <BR>} <BR>return $new_array; <BR>} <BR>


测试了一下,还是可以执行的,如下调用:

 <BR>//测试数组 <BR>$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); <BR>var_dump(splitStrToArray_mine($data)); <BR>


输出结果为:

 <BR>array(18) { <BR>[0]=> <BR>string(1) "1" <BR>[1]=> <BR>string(1) "2" <BR>[2]=> <BR>string(1) "4" <BR>[3]=> <BR>string(1) "3" <BR>[4]=> <BR>string(1) "8" <BR>[5]=> <BR>string(1) "7" <BR>[6]=> <BR>string(1) "4" <BR>[7]=> <BR>string(1) "5" <BR>[8]=> <BR>string(1) "9" <BR>[9]=> <BR>string(1) "8" <BR>[10]=> <BR>string(1) "7" <BR>[11]=> <BR>string(1) "4" <BR>[12]=> <BR>string(1) "8" <BR>[13]=> <BR>string(1) "3" <BR>[14]=> <BR>string(1) "6" <BR>[15]=> <BR>string(1) "7" <BR>[16]=> <BR>string(1) "1" <BR>[17]=> <BR>string(1) "2" <BR>} <BR>


虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:

 <BR>//标准函数 <BR>function splitStrToArray($array) <BR>{ <BR>return str_split(implode("", $array)); <BR>} <BR>


于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:

 <BR><p style="color:transparent">。本文来源gao!%daima.com搞$代*!码网1</p><cite>搞代gaodaima码</cite>//测量时间的函数 <BR>function microtime_float() <BR>{ <BR>list($usec, $sec) = explode(" ", microtime()); <BR>return ((float)$usec + (float)$sec); <BR>} <BR>//自定义函数 <BR>function splitStrToArray_mine($array) <BR>{ <BR>$new_array = array(); <BR>foreach($array as $value) <BR>{ <BR>$value = (string)$value; <BR>$len = strlen($value); <BR>for($i = 0; $i < $len; $i ++){ <BR>array_push($new_array, $value{$i}); <BR>} <BR>} <BR>return $new_array; <BR>} <BR>//标准函数 <BR>function splitStrToArray($array) <BR>{ <BR>return str_split(implode("", $array)); <BR>} <BR>//测试数组 <BR>$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); <BR>//开始测试 <BR>$mine_start = microtime_float(); <BR>splitStrToArray_mine($data); <BR>$mine_end = microtime_float(); <BR>//标准函数调用 <BR>$sta_start = microtime_float(); <BR>splitStrToArray($data); <BR>$sta_end = microtime_float(); <BR>echo "自己的函数调用运行时间为:" . (float)($mine_end - $mine_start) . " S <br />"; <BR>echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S <br />"; <BR>$multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start)); <BR>echo "前者是后者的:" . $multiple . " 倍!"; <BR>


来看看输出结果:
自己的函数调用运行时间为: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] )

 <BR>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. <BR>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. <BR>


例 1. Example uses of str_split()

 <BR><?php <BR>$str = "Hello Friend"; <BR>$arr1 = str_split($str); <BR>$arr2 = str_split($str, 3); <BR>print_r($arr1); <BR>print_r($arr2); <BR>?> <BR>


Output may look like:

 <BR>Array <BR>( <BR>[0] => H <BR>[1] => e <BR>[2] => l <BR>[3] => l <BR>[4] => o <BR>[5] => <BR>[6] => F <BR>[7] => r <BR>[8] => i <BR>[9] => e <BR>[10] => n <BR>[11] => d <BR>) <BR>Array <BR>( <BR>[0] => Hel <BR>[1] => lo <BR>[2] => Fri <BR>[3] => end <BR>) <BR>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 函数执行效率的小比较_php技巧

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址