Продолжайте в то же время с mysql_fetch_assoc - PullRequest
1 голос
/ 22 ноября 2011

У меня есть несколько строк кода, но я не могу найти правильный способ его использования.

$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

    }
}

Допустим, у меня есть 133 результата в БД.Сначала получится 50 - сделайте что-нибудь в цикле for, затем еще 50, снова пройдете цикл for и остановитесь.Последние 33 результата останутся нетронутыми.Он получит их, но причина не может достигнуть 50, остановится, и они не пройдут через цикл for.

Моя проблема в том, как "отправить" их в цикл внизу?

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

Переместите цикл 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
    }
}
1 голос
/ 22 ноября 2011

Попробуйте:

$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, выполняется другой код.

Вы понимаете?

0 голосов
/ 22 ноября 2011

Все продолжения внутри цикла кажутся ненужными.Если вы просто пытаетесь обработать весь набор результатов и сделать что-то по частям, вы можете сделать это

$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, чтобы пройти через этот массив по одной строке за раз, чтобы что-то сделать?Это имело бы смысл, если бы вы отправляли пакет данных одновременно (например, массовую вставку в базу данных), но циклическое повторение кажется странным.Почему вы не можете сделать то же самое прямо в цикле while

0 голосов
/ 22 ноября 2011

Вы можете попробовать:

$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;
...