有没有办法让它更快?
while ($item = current($data))
{
echo '<ATTR>',$item, '</ATTR>', "\n";
next($data);
}
我不喜欢我需要创建像$ item这样的新变量。
答案 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