REDLINE MAGAZINE | だから変数に入れてからループ回せって話REDLINE MAGAZINEトップページへ

すべてのエントリを見る

だから変数に入れてからループ回せって話

>>「こんな書き方もできる!」追記しました。

先日RedLine Magazine : 簡単なお知らせを表示する(1)を書いたときに疑問だったことをメモってたんだけど、それに対して「こうだから変数に入れた方がいいと思うよ」っていうのをTwitterのお友達、reaさんに教えていただきました。

疑問だった内容、該当ソースはこんな感じ。

$news_list = file($data_file);
$news_num = count($news_list);

for($i = 0; $i < $news_num; $i++){
	処理内容
}

$news_num = count($news_list);の部分について

「$news_num = count($news_list);」は別に変数に入れなくてもforの「$i < $news_num;」の部分を直接「i < count($news_list);」にしてもいいんかな

っていうのが疑問だった。どっちでも結果は同じだし。その時は変数に入れた方が分かりやすいかなーとか漠然と思ってた。

変数に入れた方がいい理由

結論から言うと、これは変数に入れて正解だったみたい。rea先生の教えによると、for文に直接 count($news_list) を入れても動くけど、ループが回るたびに$news_listの個数を数えるので効率が悪いとのこと。

それに対して、いったん変数に入れておくと、ループのたびに数える必要がないのでサーバーへの負荷が減らせる。だから変数に入れるのだよ、と。

なるほどーーーーー!って思った。言われてみれば確かにそうですよねって感じだけど、count($news_list)が毎回ループのたびにカウントしてるなんて・・・言われなきゃ一生気づいてなかった。ありがとうございます。

但し、PHPのようなサーバーサイド言語の場合、サーバー側で$news_listの個数をキャッシュしている場合もあるよ、とのこと。(これは変更できるらしい)Javascriptの場合はこの一旦変数に入れる処理をするかしないかでかなり差が出るらしい。特に某ブラウザで。

どちらにせよ、こんな知識をゲットしたので、絶対今後一生支障ない時はループん時、変数に入れるぜぃ。

また賢くなった。嬉しい。ヽ(´ー`)ノ

追記:こんな書き方もできる!

さらにさらに、rea先生からこんな書き方もできるよ、と伝授して頂きました。

for ($i = 0, $news_num = count($news_list); $i < $news_num; $i++) {
    //処理内容
}

今回の私の疑問のように、ループを回すためだけに変数に count($news_list) のようなものを代入する時には上記のようにfor文に関する処理をfor内に収めるっていう書き方ができるんだって。こういう風にひとまとめにしておくと、後々管理がらくなのかもなぁと思いました。rea先生曰く、「ちょっと見にくくはなりますが」とのことですが、なんかプロっぽくていい感じです(n'∀')η

ちなみに初期化する時にカンマ区切りにすれば複数指定が可能とのこと。javascriptも同じ書き方をするそうです。またまたまたまた賢くなった!

<< SimpleXML関数使ってフィード読み込みたい | PEAR::Authで認証してみたい >>

トラックバック

このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/224

コメント (2)

どうも、reaです。

JavaScriptの結果ですが、参考までにどうぞー。
http://hisasann.com/housetect/2008/08/arraylength.html

>rea先生
いろいろありがとうございますー。
リンク先、拝見しました。
数字で見ると「おおお!」って思いますね。自分は何万回もループを使う事が今後あるのかないのかわからないけどwww

なんだか勉強が非常に楽しくなってきました。仕事したくないww




※コメント欄に「<」「>」等を含むソースを記載する場合は実体参照に変換してください。

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。