contentdigape.com開発と毎日。comments.PerlやRubyには(“01”..”10′′);や[1..10]といったお馴染みのrange指定による配列の書き方があるのにPHPにはなくて残念、と思っていたPHPerです。10)という近い役割の関数があることを最近知りました。range指定が使えれば、一定数で回したい時などに直感的に書けて便利そうです(Rubyでは10.timesとかもありますが)。$i;}みたいな置き換えが考えられます(何も考えずに書けそう)。楽に書けるのはいいのですが、一般にforeachはforよりも処理速度が遅いという問題がネックになりそうです。いうことで、どれくらい速度差があるのか、検証して見ることにしました。"\nspend:{$spendTime}\n"計測結果それぞれ5回ずつ試行した結果の平均値をまとめてみます。3.074秒for文の方が遅いのは確かですが、件数が1万件、10万件の場合の差は10ミリ秒以下と意外と少なかったです。100万件だと200ミリ秒くらいの差が出てきますね。foreachがんばれないかなーということで、少しコードをいじってみます。forとforeach(改良版)で処理速度を計測してみるforeachに渡すrange関数の結果の値を先に変数に入れてから、やってみます。先ほどと同じように、それぞれ5回ずつ試行した結果の平均値をまとめてみます。0.050秒なんと、件数が1万件、10万件の場合はforeachの方がほんのちょっと速い結果になりました。100万件の場合だと若干for文のほう50ミリ秒速いものの、1/4まで差が縮まったことが見てとれます。まとめ思ってたよりもforeach文ががんばってくれた結果になりました。レスポンスにシビアな処理や、かなり大量のデータを扱う処理でない限り、range関数を使ったforeach文でもまったく問題ないのではないでしょうか。普段使いのバッチ処理や、テストコードなんかでは活躍する場面がありそうです。foreach文の改良版(range関数の結果の値を先に変数に入れておく)であれば、変数定義で多少手軽さは失われますが、誤差のレベルまで速度は縮まります。14:58matsuさんほんとですね。PHP5.4.2で試していたので、バージョン差異があるかもしれません。コメントをキャンセルメールアドレスが公開されることはありません。15恵比寿ではたらく、プロダクトオーナー兼Webエンジニア。デザイナー、まれにインフラエンジニア。Paternoster.。