我一直在考虑这个问题,为了代码可读性,我倾向于使用像range
&这样的函数构建的php。 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;
}
我只是想知道我的方法是不是很好的做法,或者是否有人会查看我的代码会试图找出我居住的地方?
答案 0 :(得分:2)
对于小数字,以下方法似乎很快:
$tmp = range(5,$limit,5);
$tmp = array_combine($tmp, $tmp);
然而,对于更大的数字,for循环要快得多:
for($i =5; $i<=$limit; $i += 5)
$tmp[$i] = $i;
请尝试以下代码here:
<?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
范围&amp;组合胜利!
对于$limit = 500
,第二种方法更快:
1=> 3.7908554077148E-5
2=> 2.9087066650391E-5
for loop wins!
所以在我看来,我会选择第二种方法(for loop),因为对于小数字,即使第一种方法更快,时间差也可以忽略不计。然而,对于大数字,第二种方法总是更快,而我们在计算机科学中关心的是,最差时间
<强>结论:强>
For循环是赢家!