PHPで大きな配列などを扱うときはforeachでなくlistとeachを使うとメモリを節約できる

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>');

上手に使い分けたいですね。

コメント

  1. Pingback: PHPを勉強するならこれだけは言いたい!PHPのオススメ勉強法 | Library Blog

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください