質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2932閲覧

PHPのforeach関数の使い方について。

poppo23

総合スコア163

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/08/01 17:20

PHPのforeach関数のパフォーマンスについて教えてください。

下記のようなものを行うとユーザのオブジェクトに複数回get()の関数をコールしてしまいます。

foreach ($user->get() as $user) { // コードを入力 }

こっちのほうが効率がいいのでしょうか?

$users = $user->get(); foreach ($users as $user) { // コードを入力 }

誰かご存じないですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

その些細な効率が問題になるシチュエーションなら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

gomo

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

パフォーマンス、効率と言うのが何を意味しているのかよくわかりませんが、メモリ効率を考えると、foreachはメモリを浪費する(使う配列自体の倍以上?)という問題があります。

$user->get()が何を返却するのかよくわかりませんが、配列ということであればすでに回答されている通り、呼び出されるのは最初の1回だけで、以降はその配列が順次処理されるだけのはずです。例に挙げられているコードはどちらでもほとんど同じだと思います。
と言うより、もし$user->get()が複数回呼び出されるのだとしたら、foreachとは一体何なのかわからなくなると思います。(反復処理の終了条件が不明)

配列に対しては、whileとeachを組み合わせる方がメモリを浪費しません。

投稿2014/10/30 08:54

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

foreachは$user->get()の結果を使うので、下記のようだと思えばいいですよ。

foreach (($user->get()) as $user) { // ... }

foreachは関数自体ではなく結果をパスしているので関数は複数回コールされません。

投稿2014/08/03 02:30

saori92

総合スコア139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問