• ベストアンサー

foreachの処理方法について

●やりたい事 【変更前】は抽出した顧客を一度に全て処理していた。 【変更後】は抽出した顧客を100件ごとに処理したい。 抽出後の処理をforeachでやっているので 100件処理して次の101件目からなど、どう対処してよいか わかりません。よい対処方法があれな教えてください。 ※「対象条件のデータを全件抽出する」部分は変更したくないです。 その後の処理で対応できればと考えています。 DB接続処理は省略してます。 【変更前】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); foreach($data as $value){ //該当顧客を対象に処理する } 【変更後】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); //ループ数の計算 $loop = ceil( count($data) / 100 ); //************************************* //ここで$dataを分割できないでしょうか? //************************************* for($i=0;i<$loop;$i++){ foreach($data as $value){ //該当100件ごと顧客を対象に処理する } }

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

  • ベストアンサー
  • 7tv3mm
  • ベストアンサー率75% (12/16)
回答No.3

こんな感じだと、どうでしょう ? // 100件ごとに格納 $ary_num = 0; $cnt = 0; $limit = 100; while ($row = mysql_fetch_array($result)) { $data[$ary_num][$cnt] = $row; $cnt++; if ($cnt == $limit) { $cnt = 0; $ary_num++; } } // 処理 foreach($data as $value){ foreach($value as $val2){ // 処理内容 } }

その他の回答 (2)

  • 7tv3mm
  • ベストアンサー率75% (12/16)
回答No.2

$data を2次元配列にするとかは ?

pos_pos
質問者

お礼

大変参考になりました。 このように編集して2次元配列を作成すれば いいのですね! ありがとうございました。

pos_pos
質問者

補足

7tv3mmさん、$data を2次元配列にする方法を教えてください。 お願いします。

  • takubou05
  • ベストアンサー率52% (11/21)
回答No.1

$i = 0; foreach(){ $i++ if($i % 100 = 0){ 顧客対象処理(); } } 顧客対象処理(); こんな感じじゃだめですか?

pos_pos
質問者

補足

takubou05さん、ありがとうございます。 こういう方法もあるんですね! 大変、参考になりました。 ありがとうございました。

関連するQ&A