如何在PHP中更快地使数组循环

时间:2009-07-21 01:54:51

标签: php

有没有办法让它更快?

while ($item = current($data))
{
    echo '<ATTR>',$item, '</ATTR>', "\n";
    next($data);
}

我不喜欢我需要创建像$ item这样的新变量。

7 个答案:

答案 0 :(得分:4)

<?php
$transport = array('foot', 'bike', 'car', 'plane');

foreach ($transport as $value) {
    echo $value;
}
?>

答案 1 :(得分:1)

如果您不想创建临时变量,请执行以下操作:

while (current($data))
{
    echo '<ATTR>',current($data), '</ATTR>', "\n";
    next($data);
}

然而,我不知道这是否真的会让它更快。他们唯一的方式就是使用剖析器,但这是一种微观优化,我怀疑你会注意到它的区别。

加速循环的最佳方法是使用更快的计算机。

答案 2 :(得分:1)

如果你所做的只是上面的代码,你可以使用一个内爆声明。


if (count($data) > 0) {
     echo "<ATTR>".implode("</ATTR>\n<ATTR>", $data)."</ATTR>";
}

答案 3 :(得分:1)

$ nl =“\ n”;

while ($item = current($data))
{
    echo '<ATTR>',$item, '</ATTR>',$nl;
    next($data);
}

将换行符存储到变量中,而不是让PHP在每次迭代中解析双引号。

答案 4 :(得分:0)

你可以做一个foreach,但是你会创建2个新变量。除非你不喜欢在while()子句中分配变量的想法。

foreach($data as $key => $value)
{
    echo $key . " => ".$value;
}

无论哪种方式,您都需要创建一个实际变量。

答案 5 :(得分:0)

这个怎么样:

function my_func($str) {
    echo "<attr>{$str}</attr>\n";
}
array_map('my_func', $data);

(应该可行,但我对它与foreach循环相比的速度感到好奇)

或者,如果你使用PHP&gt; = 5.3 (可能不是你的情况,顺便说一句),你可以使用这个,基于lambda函数:

array_map(function ($item) {
    echo "<attr>{$item}</attr>\n";
}, $data);

几乎相同,但无需在程序中声明仅使用一次的函数。

答案 6 :(得分:0)

我做了一个小凳子来梳理它。

<?php

$a = array();
for ($i = 0; $i < 100000; $i++) {
    $a[] = $i;
}

$start = microtime(true);
foreach ($a as $k => $v) {
    $a[$k] = $a[$k] + 1;
}
echo "foreach               : ", microtime(true) - $start, " Seconds\n";

$start = microtime(true);
foreach ($a as $k => &$v) {
    $v = $v + 1;
}
echo "foreach with cursor   : ", microtime(true) - $start, " Seconds\n";

$start = microtime(true);
for ($i = 0; $i < count($a); ++$i) {
    $a[$i] = $a[$i] + 1;
}
echo "for                   : ", microtime(true) - $start, " Seconds\n";

$start = microtime(true);
for ($i=0,$l=count($a);$i<$l;++$i) {
    $a[$i] = $a[$i] + 1;
}
echo "for with cached count : ", microtime(true) - $start, " Seconds\n";

结果

foreach               : 0.0039410591125488 Seconds
foreach with cursor   : 0.00357985496521 Seconds
for                   : 0.0022602081298828 Seconds
for with cached count : 0.0020480155944824 Seconds