1

数行のコードがありますが、適切に使用する正しい方法が見つかりません。

$cc = 0;
$tt = 50;

while ($row = mysql_fetch_assoc($result)) {

//building array with values from DB.

    if (++$cc < $tt)
        continue;

    for ($i = 0; $i < $tt; $i++) {

    //Work with the array

    }
}

DBに133の結果があるとしましょう。最初の 50 を取得します。for ループで何かを実行し、さらに 50 を取得すると、再び for ループを通過して停止します。最後の 33 件の結果は変更されません。それはそれらを取得しますが、原因は50に達することができず、停止し、forループを通過しません。

私の問題は、そこにあるループでそれらを「送信」する方法ですか?

4

4 に答える 4

2

for ループを関数内に移動し、while ループの後に呼び出します。

$cc = 0;
$tt = 50;
while ($row = mysql_fetch_assoc($result)) {

//building array with values from DB.

    if (++$cc < $tt) continue;

    work_with_array($array);
}
if($cc) work_with_array($array);

function work_with_array($array) {
    for ($i = 0; $i < count($array); $i++) {
        //Work with the array
    }
}
于 2011-11-22T12:38:56.403 に答える
1

これを試して:

$i = 0
while ($row = mysql_fetch_assoc($result)):
  if($i < 50):
   //Code when $i is less than 50
   //Insert code here

  elseif($i > 50 && $i < 100):
   //Code when $i is more than 50 but less than 100
   //Insert code here

  elseif($i > 100):
   //Code when $i is more than 100
   //Insert code here

  endif;
 $i++;
endwhile;

したがって、すべての結果はこのループを通過します。$i が 50 未満の場合 (または結果が 50 未満の場合) は、何らかのコードが実行され、$i が 50 より大きく 100 未満の場合は、別のコードが実行されます。最後に $i が 100 を超える場合、他のコードが実行されます。

わかりますか?

于 2011-11-22T11:55:06.967 に答える
0

あなたは試すことができます:

$i = 0
while ($row = mysql_fetch_assoc($result) && $i < 100):
  if($i < 50):
   //Code when $i is less than 50
  else:
   //Code more than or equal to 50
  endif;
 $i++;

endwhile;
于 2011-11-22T11:02:46.357 に答える
0

ループ内のすべての継続は不必要に思えます。単純に結果セット全体を処理し、チャンクで何かを実行しようとしている場合は、これを行うことができます

$cc = 0;
$tt = 50;
$result_array = array();

// this will chunk your array into blocks
while ($row = mysql_fetch_assoc($result)) {

    //building array with values from DB.
    $result_array[intval($cc++/$tt)] = $row;

}

// at this point you should have result_array with indexes:0,1,2 and have subarrays with 50, 50, 33 entries each.


foreach ($result_array as $k=>$sub_array) {
    //Work with your sub array
    foreach ($sub_array as $one_row)
    {
       // do something with the row
    }
}

私は@Col.Shrapnelに同意します。while ループ内に別の配列を作成して、その配列を一度に 1 行ずつ処理して何かを行うのはなぜですか? データのバッチを一度に送信するのは理にかなっていますが (確かに db への一括挿入のように)、もう一度ループするのは奇妙に思えます。whileループで同じことができないのはなぜですか

于 2011-11-22T14:01:46.570 に答える