2009-07-21 22 views
0

有没有办法让这个更快?如何使PHP中的数组循环更快

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

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

+4

实际上,您根本不需要$ item声明。 – 2009-07-21 01:56:47

+0

难道你只需要把$ item = current($ data)而不是语句放在while中? – 2009-07-21 02:00:01

+0

我使用microtime检查速度。看起来,使用“while(current($ data))”比“while($ item = current($ data))”要慢,但是很少。使用foreach要快得多。 – 2009-07-21 02:27:09

回答

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

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

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

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

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

1

如果您不希望创建临时变量,像这样做:

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

不过,我不知道这是否会真正使任何更快。他们只能通过一个分析器来辨别,但是这是一种微型优化,我怀疑你会注意到它的不同之处。

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

1

如果你所做的只是上面的代码,你可以使用implode语句。


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

$ nl =“\ n”;;

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

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

0

这个怎么样:

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

(应该工作,但我很好奇它的速度与foreach环比)

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

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

几乎相同,但没有不得不在程序中声明一次函数。