Today I found such a function when reading the Arr class in the kohana source code
/** * 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";
Tested using native functions and custom functions respectively. When generating all multiples of 3 between 0 and 1000000, the results were beyond my expectations:
The first is the result of using native functions:
It can be seen from the table that custom functions save memory and time than native functions when generating random numbers. Moreover, native functions consume a lot of memory and time when generating a large number of random numbers. Custom functions are here. On the other hand, it performs well. The memory generated and the time consumed are basically stable. It seems that what the previous senior said may not be completely correct, but it should be noted here that our custom function here can only generate numbers, while the native range still has It can generate letters, but I think it shouldn’t be too difficult to add letters with this custom function~
It seems that kohana officials have a good understanding of the range function and the complexity of this function in the PHP kernel. That’s why this small optimization can do so well. It’s amazing! ! !
send Me~