今天在阅读kohana源码中的Arr类的时候发现了这样一个函数
/** * Fill an array with a range of numbers. * * // Fill an array with values 5, 10, 15, 20 * $values = Arr::range(5, 20); * * @param integer $step stepping * @param integer $max ending number * @return array */ public static function range($step = 10, $max = 100) { if ($step < 1) return array();$array = array(); for ($i = $step; $i <= $max; $i += $step) { $array[$i] = $i; }
return $array; }
看到这里的时候,我发现php的原生函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法——PHP为我们提供了那么多的原生函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原生函数range()会报错“Fatal error: Cannot redeclare range() in”。
function _range($step = 10, $max = 100) { if ($step < 1) return array(); $array = array(); for ($i = $step; $i <= $max; $i += $step) { $array[$i] = $i; } return $array; } $time['begin'] = microtime(true); $tmp = range(0,1000000,3); //$tmp = _range(0,1000000,3); $time['end'] = microtime(true); echo $time['end'] - $time['begin'].'s'."\r"; echo (memory_get_peak_usage()/1024/1024)."M";
分别用原生函数和自定义函数进行测试,在产生0~1000000之间所有的3的倍数时,结果出乎我的意料:
首先是使用原生函数的结果:
下面是使用自定义函数的结果:
为了结果比较准确,我在做个图表统计
统计次数 原生函数range() 自定义函数_range()
(0,1000000,3) 5.155E-3s 27.5530M 1.907E-5s 0.1241M
(0,1000000,2) 7.479E-3s 40.2688M 1.811E-5s 0.1241M
(0,1000,1) 8.16E-5s 0.1620M 2.649E-5s 0.1241M
从表中可以看出产生随机数时自定义函数比原生函数要节省内存和时间,而且原生函数在生成大量随机数时特别耗内存,消耗时间也特别多,而自定义函数在这方面则表现得好,产生的内存和消耗的时间基本稳定,看来前面那位前辈说的不一定完全正确哦,但是这里要注意我们这里的自定义函数只能生成数字,而原生的range还可以产生字母的,但是我想这自定义函数添加个字母应该也不会太难~
看来kohana官方对range这个函数很是了解,对php内核中该函数的复杂度也很了解,所以这个小优化才可以做这么好,太厉害了!!!
使用php标签 通过 php 标签可以在模板里写任意的PHP语句代码,如: <php> echo 'Hello,ThinkCMF!'; $arr = ['id'=>1]; print_r($arr); </php>
使用php标签 通过 php 标签可以在模板里写任意的PHP语句代码,如: <php> echo 'Hello,ThinkCMF!'; $arr = ['id'=>1]; print_r($arr); </php>
Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式: 使用php标签 例如: {php}echo 'Hello,world!';{/php} 我们建议需要使用PHP代码的时候尽量采用php标签,因为原生的PHP语法可能会被配置禁用而导致解析错误。 使用原生php代码 <?php echo 'Hello,world!'; ?> 注意:php标签或
本文向大家介绍php去除html标记的原生函数详解,包括了php去除html标记的原生函数详解的使用技巧和注意事项,需要的朋友参考一下 strip_tags 去掉 HTML 及 PHP 的标记。 语法: string strip_tags(string str); 传回值: 字串 函式种类: 资料处理 内容说明 本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的
PHP 7.3.4中preg_replace()函数未生效的原因是什么? 我在学习日常英语是收集了这样一个txt的文本,文件名eng.txt: 我想用php来处理下这个文本文件,去掉多余的回车。 不过通过运行,发现并没有达到预期的效果。 如下才是我觉得应该返回的效果。 以上结果我是用python 实现的,正则替换规则一样,希望得知为什么会在php中不行
问题内容: 因此,我一直在做一些挖掘工作,并试图拼凑一个在PHP中生成有效v4 UUID的函数。这是我能找到的最接近的。我对十六进制,十进制,二进制,PHP的按位运算符之类的知识几乎不存在。该功能会生成一个有效的v4 UUID,直到一个区域。v4 UUID的形式应为: xxxxxxxx-xxxx- 4 xxx- y xxx-xxxxxxxxxxxx 其中 y 是8、9,A或B。这是函数失败的原因,