2020-10-19に投稿

【php】php7系では、ループは普通にforeachを使えば良い

OOMの原因調査をしていた時

foreachを使うとき、もうちょいメモリのことを気にして行こうぜ
[PHP]ループのメモリ使用量と処理速度を比較しました

こんな記事を見つけた。

なるほど、foreachは配列のコピーを作るからメモリを食ってしまうので、
何でもかんでもforeachを使えばいいってわけじゃないのか…。
使う時も、unsertとかを上手く使わないといけないのか…。

と思ったのですが。
どうやらコレは2010年辺り(php5系?)の話のようで、
php7系ではそんなことないらしい。

PHP7系におけるループのメモリ使用量と処理速度を比較

実際、自分のコードでも軽く比較してみたけど、特に差は見られなかった。
(ちゃんとは比較してないので数値は載せませんが。)
というか、

while(list($key, $val) = each($data)) {
   $results[] = $key * $val;
}

↑コレに関しては「eachはもう使うんじゃねえ」などと怒られた。

結論

今まで通りforeach使おう。
そしてメモリ食ってるのは、foreachやforeachの使い方が悪いわけじゃない というのがわかった。

ただのぼやき

「php foreach メモリ」とかで検索すると、
[PHP]ループのメモリ使用量と処理速度を比較しました
これが上位に出てくるんですよね。
多分こういうことって普通にあると思うので…参考にする前に、
・何年前の記事なのか
・バージョン
くらいはちゃんと確認しないといかんな。

と、改めて感じた。

ツイッターでシェア
みんなに共有、忘れないようにメモ

みみみみみ

2歳と2ヶ月くらいの赤ちゃんです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント