PHPで大きな配列などを扱うときはforeachでなくlistとeachを使うとメモリを節約できます。
$ary = array('foo'=>'FOO','bar'=>'BAR', 'baz'=>'BAZ');
reset($ary);
while (list($key, $value) = each($ary)) {
echo "{$key} => {$value}<br>\n";
}
『プログラミングPHP 第2版』には次のような説明があります。
この方法は、foreachのように配列のコピーを作成しません。これは、大きな配列などでメモリを節約したい場合に便利です。
『プログラミングPHP 第2版』より
RadPHP XEのRPCLのソースコードを読んでいると、forやforeachでなくeachを使っているので不思議に思っていました。
こういう理由があったのかもしれません。
eachのもう一つの長所として、ループを途中から継続できる点があります。
$langs = array('プログラミング言語'=>'作者名',
'Python'=>'Guido van Rossum',
'Perl'=>'Larry Wall',
'C++'=>'Bjarne Stroustrup');
reset($langs);
//一行目は見出し行(th)
list($c1, $c2) = each($langs);
echo("<table><tr><th>{$c1}</th><th>{$c2}</th></tr>");
//二行目以降は本文(td)
while (list($c1,$c2)=each($langs)) {
echo("<tr><td>{$c1}</td><td>{$c2}</td></tr>");
}
echo('</table>');
上手に使い分けたいですね。
Pingback: PHPを勉強するならこれだけは言いたい!PHPのオススメ勉強法 | Library Blog