2009-07-21 14 views
0

これを高速化する方法はありますか?PHPで配列ループを高速化する方法

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

$ itemのような新しい変数を作成する必要があるのは気に入らないです。

+4

実際には、$ item宣言はまったく必要ありません。 –

+0

文の代わりにwhileの中に$ item = current($ data)を置くだけでいいですか? –

+0

私はスピードをmicrotimeでチェックしました。そして、 "while(current($ data))"は "while($ item = current($ data))"よりも遅いが、ごくわずかであるようだ。 foreachを使用する方がはるかに高速です。 –

答えて

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

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

foreachを使用すると速くなりました。 –

0

foreachを実行できますが、2つの新しい変数が作成されます。 while()節の中に変数を割り当てるという考えが気に入らない限り、

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

いずれにしても、実際の変数を作成する必要があります。

1

あなたはこのようにそれを行うには、一時的な変数を作成したくない場合は、次の

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

これは実際にそれがどの速く作ればしかし、私は知りません。彼らはプロファイラーと話す唯一の方法ですが、それはあなたがその違いに気づくことは疑いのないようなマイクロ最適化です。

ループを高速化する最も良い方法は、より高速なコンピュータを使用することです。

+0

合意しました。ループの大きさが十分に大きければ、サーバーが応答を返送するのにかかる時間が最適化された時間を短縮します。 –

+0

私はmicrotime()を使って速度をチェックし、foreachはcurrent()とnext()ループより速いです。 –

+0

はい、しかし、あなたはそれらの一時変数を作成したくないと言っています - あなたが作成している 'foreach'ループを2つ作成しています! –

1

上記のコードを実行しているのであれば、implode文を使用できます。


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

implode( "\ n"、$ data)を意味します。 –

+0

処理されるとおそらくforeachループを行うので、おそらく同じ量の(マイクロ)時間がかかるでしょう。 –

+1

ああ、彼は彼のポストを編集しました... –

1

$ nl = "\ n";

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

改行文字を変数に格納するのではなく、PHPが各繰り返しで二重引用符を解析するのではなく、

+0

これは良いヒントです。ありがとうございます。 –

+2

アレックス。 \ nを変数として保存する代わりに、PHP_EOLを使用してみてください。 – hobodave

0

何1本について:

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

(仕事が、私はそれのforeachループと比べて速度に関する興味必要があります)

それとも、あなたが使用している場合はPHP> = 5.3 (おそらくないあなたの場合、ところで)、あなたはラムダ関数に基づいて、この1、使用することができます。

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

ほぼ同じに、しかしなしプログラムで一度だけ使用される関数を宣言する必要があります。