我一直在考虑这个问题,为了代码的可读性,我倾向于使用内置在range
&array_combine
生成这样的数字数组:
array(
5 => 5,
10 => 10,
15 => 15,
20 => 20,
25 => 25,
...
60 => 60
);
所以目前我使用这个生成上面的:
$nums = range(5, 60, 5);
$nums = array_combine($nums, $nums);
我想知道上面的方法和简单地使用这样的循环之间是否存在速度或内存差异:
for ($i = 5; $i <= 60; $i++) {
$nums[$i] = $i;
$i += 5;
}
我只是想知道我的方法是不是很好的实践,或者有人会查看我的代码,试图找出我住在哪里?
以下方法似乎对小数字很快:
$tmp = range(5,$limit,5);
$tmp = array_combine($tmp, $tmp);
然而,对于较大的数字,for循环要快得多:
for($i =5; $i<=$limit; $i += 5)
$tmp[$i] = $i;
在这里尝试以下代码:
<?php
$limit = 200;
$time_start = microtime(true);
$tmp = range(5,$limit,5);
$tmp = array_combine($tmp, $tmp);
$time_end = microtime(true);
echo $time_end - $time_start;
echo "<br/>";
//print_r($tmp);
echo "<br/>";
$time_start = microtime(true);
$tmp = array();
for($i =5; $i<=$limit; $i += 5)
$tmp[$i] = $i;
$time_end = microtime(true);
echo $time_end - $time_start;
echo "<br/>";
//print_r($tmp);
对于$limit = 200
,第一种方法更快:
1=> 2.0980834960938E-5
2=> 2.1934509277344E-5
范围&组合获胜
对于$limit = 500
,第二种方法更快:
1=> 3.7908554077148E-5
2=> 2.9087066650391E-5
循环获胜
因此,在我看来,我会选择第二种方法(用于循环),因为对于较小的数字,即使第一种方法更快,时间差也可以忽略不计。然而,对于大的数字,第二种方法总是更快,而且我们在计算机科学中关心的是最坏的时间
结论:
因为循环是赢家!