foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
Q&A
解決済
3回答
3155閲覧
総合スコア163
0グッド
0クリップ
投稿2014/08/01 17:20
0
PHPのforeach関数のパフォーマンスについて教えてください。
下記のようなものを行うとユーザのオブジェクトに複数回get()の関数をコールしてしまいます。
foreach ($user->get() as $user) { // コードを入力 }
こっちのほうが効率がいいのでしょうか?
$users = $user->get(); foreach ($users as $user) { // コードを入力 }
誰かご存じないですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
回答3件
その些細な効率が問題になるシチュエーションならPHPは使わないほうがいいです。JAVAでもいいですし、Cとかコンパイル言語を使うべきだと思いました。
私hPHPの実装に詳しいわけではいので、あくまで想像ですが、単純に一回変数に代入する負荷がかかるので前者のほうが効率がいいと想像します。
こういう細かい負荷が気になる時があるけど、一番確実なのベンチを取ってみるのがいいと思いますよ。
$start = microtime(true); for($i = 0; $i < 100000; $i++){ foreach ($user->get() as $user) { // ... } } echo sprintf("%01.04f", microtime(true) - $start);
投稿2014/10/30 14:16
総合スコア27
パフォーマンス、効率と言うのが何を意味しているのかよくわかりませんが、メモリ効率を考えると、foreachはメモリを浪費する(使う配列自体の倍以上?)という問題があります。
$user->get()が何を返却するのかよくわかりませんが、配列ということであればすでに回答されている通り、呼び出されるのは最初の1回だけで、以降はその配列が順次処理されるだけのはずです。例に挙げられているコードはどちらでもほとんど同じだと思います。 と言うより、もし$user->get()が複数回呼び出されるのだとしたら、foreachとは一体何なのかわからなくなると思います。(反復処理の終了条件が不明)
$user->get()
配列に対しては、whileとeachを組み合わせる方がメモリを浪費しません。
投稿2014/10/30 08:54
総合スコア1356
ベストアンサー
foreachは$user->get()の結果を使うので、下記のようだと思えばいいですよ。
foreach (($user->get()) as $user) { // ... }
foreachは関数自体ではなく結果をパスしているので関数は複数回コールされません。
投稿2014/08/03 02:30
総合スコア139
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
PHPのforeach関数の使い方について。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。