- ベストアンサー
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件ごと顧客を対象に処理する } }
- みんなの回答 (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さん、$data を2次元配列にする方法を教えてください。 お願いします。