• ベストアンサー

PHPのループ数限界値について

PHPのループ数限界値について 宜しくお願い致します。PHP 5.1.6を使用しております。 PHPのforやwhileのループ処理について、限界のループ数というのは存在するのでしょうか? 今作っているプログラムで、約15,000項目の配列と約10,000項目の配列で2重のループ処理しています。 この場合のループ数は15,000×10,000=150,000,000回の繰り返し回数となってしまいます。 しかも、この配列数は今後も増える可能性が高いです。 ループの限界値が何回なのか、教えてください。

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#116331
noname#116331
回答No.1

PHPのループ数限界値は、 タイムアウトになるまでと思います。 タイムアウトの時間はphp.iniで設定されています。 Webサーバーなら、 Webサーバーのタイムアウトより長い場合は、Webサーバーの設定時間でタイムアウトと思います。 レンタルサーバーではタイムアウトの変更は、出来ないところがほとんどと思います。専用サーバーなら可能なところもあるでしょうが。

その他の回答 (2)

  • yukitakao
  • ベストアンサー率44% (16/36)
回答No.3

下の回答にあるようにタイムアウトにひっかかる、あと 上記をメモリ上での展開の仕方によりますが利用可能なメモリの上限にひっかかる、などが考えられます。 上記にひっかからなければループ回数の上限はないはずです。 が、これも下の回答にあるとおり設計を見直すべきだと思います。 仮に上限にひっからなかったとしても完了に10分かかった、とかになった場合でも 仕様を満たしているのでしょうか? 具体的な内容がわからないのでなんとも言えませんが 処理を簡略化するよう設計変更がかならず可能だと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

物理的な限界値より別のネックが懸念されます。 1億回以上の処理を冗長に回す必要があるのかフローを見直す必要があるのでは? 仮に必要だとしても、処理をわけて分散処理にかけるなど実行までには 相応の工夫が必要な案件ではないでしょうか?

関連するQ&A

  • PHPループをカウントダウンできますか?

    <?php $i = 0; while ($i < 10) {   if ($i == 5) {    echo "$i 回で終わります<br>";    break;   }   echo "$i 回目のループ<br>";   $i++; } 【結果】 0 回目のループ 1 回目のループ 2 回目のループ 3 回目のループ 4 回目のループ 5 回で終わります と、0,1,2,3,4,5とループがありますが、 この結果を逆に、 5 回で終わります 4 回目のループ 3 回目のループ 2 回目のループ 1 回目のループ 0 回目のループ とすることは可能でしょうか?? また、もし可能であれば、なんという方法(名称?専門的な呼び方?)となるのでしょうか ご存じの方いらっしゃいましたら、ご回答お願い致します。

    • ベストアンサー
    • PHP
  • C言語 ループ

    本当にこんな稚拙なプログラムで申し訳ないのですが、画像のr==1となってwhile以下をやりなおすときに、なぜかfor以下に入りません・・・ どなたか、アドバイスくれると助かります・・・ こんな冗長な記述で申し訳ありません ※特に問題とするのはなぜ二回目はwhile以下うまくループできないか、なので配列に代入しているものや、未知の関数は正しく作動しているものと考えてください。 なお、わかりやすいように、それぞれのスクショの一番下の行を選択してスクショしました。 一枚目は元のプログラムとその実行結果です。

  • PHPコーディング 訓練が出来る媒体

    最近、PHPプログラミングの教室に通っています。 今までプログラム言語を習ったkとがないので、簡単なプログラムを ブラウザに表示させるのも、まったく訳が分かりません。 特に今やっている、ループ処理(for, while)が理解できません。 授業は、「~をfor/while文を使って画面に表示させなさい」のような 感じです。 変数が2個出てくる時点で、脳みそグチャグチャです。 練習するしかないと思いますが、初心者のループ処理を詳しく書かれていて、 レベルアップにつながる練習問題が記載されている書籍、またはwebを教えてください。

    • ベストアンサー
    • PHP
  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • phpの限界は?

    たとえば、企業が自社のHPより、ショッピングカートを設置する場合は、 プログラム言語は「php」または「perl」で 顧客のデータファイルも、カンマ区切りのテキスト形式の「csv」でも 十分かと思います。 しかし、楽天やヤフーのような同時に何十人も使用する場合も、  (1)「php」または「perl」で作ったプログラムでも堪えられるのでしょうか?同時に何人程度の使用なら大丈夫なのでしょう?  (2)一般的にこのようなケース(同時に何十人も使用するプログラムの場合   ショッピングカートの場合、メール配信もあると思います。)は   どんな言語でプログラムを作成するのでしょうか?  (3)データファィルは、MySQLなら大丈夫でしょうが、   テキスト形式のファイルを使う場合、どのような規模のシステムが限界なのでしょうか?   件数または同時使用頻度など。   テキスト形式のファイルの場合、データベースになっていませんから、   ファイルの更新は一度、全レコードを配列に入れて、   ふたたび、全配列をファィルに書き出すといった処理をすると思います。(もちろんLOCKはしますが) 教えていいただければ幸いです。

    • ベストアンサー
    • PHP
  • PHP プログラム ループ処理

    プログラム初心者です、ループ処理についてうまい解決方法が思い浮かばず相談させて頂きます。 ループ処理において、ループ内で変数を定義するのに違う名前を指定するにはどのような方法があるのでしょうか 例えばwhileの場合 $i =0; while($i<10){ $hoge = $i; $i++ } この$hogeを2順目には$hoge1、3順目には$hoge2と言うように増やしたり一定の法則に乗っ取って変数名を変更するにはどのように書けばいいのでしょうか。 どなたかご教授頂ければと存じます、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ループの条件設定について

    こんにちは。 題名の通り、ループ条件について質問です。 例えば Rという1次元配列(要素数は4)があり、この配列Rの値が全て0になった場合、ループを抜け出すというようなプログラムを組みたいのです。 上記の例のような要素数が少ない場合はdo-while文で論理演算子を使ってひたすら条件を書けばいいのですが、実際計算させるのは要素数が500とかなので、現実的にはちょっと無理だなと、他の方法を考えているのですが、良い考えが思い浮かびません。。 どなたかアドバイスをお願いします。

  • フォーム内の同一名のエレメントの数を調べる方法

    PHPではフォーム内の同一名のオブジェクト(正式な呼び方がわかりません)の数を取得する事ができますが、JavaScriptではできないのでしょうか。 PHPでは submit された時に $_POST で同一名のオブジェクトを配列で受け取り、その要素数を取得する事ができます。 たぶん、こんな感じ。  $koumoku = $_POST["koumoku"];  $cnt = count($koumoku); JavaScriptではエレメントの配列と言う考え方が容易でないのか、まったくないのか、エレメント「koumoku[0]」や「koumoku[1]」はこの文字列全体がエレメント名になっていて、[0][1]をインデックスとする配列としては扱えなかったと思います。 それはそれでいいのですが、例えばこのフォーム内から「koumoku」と言う文字列を持つ名前のエレメントの数を、何かしらの関数で調べる方法はないのでしょうか。 あれば、その方法を教えてください。 同一名のオブジェクトの個数回のループ処理がしたいだけなのですが、この個数が変動するのでプログラム内で固定のループ処理にできないで困っています。 なければ document.form.element.length の回数分、document.form.element[x].name で名前を調べながら処理しようと思っています。 そう言う方法が一般的なのでしょうか。

  • 無限ループとループ文

    プログラミングにおいて while文、for文、foreach文などループ文は種類がありますが 無限ループに繋がってしまう恐れが高い順などは存在しますか? どのループ文もミスなく慎重に 正確な書き方さえしていれば無限ループは起きないと思いますが もしそのような順が存在するのであれば、わからないので教えて頂きたいです。

  • 配列の中に複数存在する数がいくつあるか

    お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]==array[j]){ cnt++; break; } } } return cnt; forループで配列0から同じ数を順番に調べ、もしヒットすればカウントを増やして内側のループをブレイクし、配列1からまた順番に調べようとしたのですが、 上の例の場合、配列0と配列1が同じ数(0)ですので、カウントが余計に増えてしまいます。 どのように組めばうまく動作するでしょうか。宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう