PHP array_combine& range VS foreach循环获取数组

时间:2014-09-19 16:04:07

标签: php

我一直在考虑这个问题,为了代码可读性,我倾向于使用像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;
}

我只是想知道我的方法是不是很好的做法,或者是否有人会查看我的代码会试图找出我居住的地方?

1 个答案:

答案 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循环是赢家!