PHP Проблема с вложенным для l oop в частях куска - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь сделать вложенный для обработки для в блоках, все работает нормально, когда у меня есть значения 32, но когда я в сумме 31, 4-й блок не обрабатывается. в чем может быть проблема?

Для l oop не следует использовать Range из-за проблемы с памятью.

 $start = 1; //170003
    $total = 32;
    $chunksize=10;
    $block = 1;
    for ($i=$start; $i <= $total; $block++){
        echo "Block: ".$block."/".($total/$chunksize).PHP_EOL;

        for ($j=0; $j < $chunksize; $j++){
            //if($i === $total) break;
            echo "[".$block."] ".$i."/".$total." [Rest: ".($total-$i)."] " .PHP_EOL;

            if($i === $total) break;
            $i++;
        }

        echo "------------------------------".PHP_EOL;
        if($i === $total) break;
    }

Наша производительность:

Block: 1/3.2
[1] 1/32 [Rest: 31]
[1] 2/32 [Rest: 30]
[1] 3/32 [Rest: 29]
[1] 4/32 [Rest: 28]
[1] 5/32 [Rest: 27]
[1] 6/32 [Rest: 26]
[1] 7/32 [Rest: 25]
[1] 8/32 [Rest: 24]
[1] 9/32 [Rest: 23]
[1] 10/32 [Rest: 22]
------------------------------
Block: 2/3.2
[2] 11/32 [Rest: 21]
[2] 12/32 [Rest: 20]
[2] 13/32 [Rest: 19]
[2] 14/32 [Rest: 18]
[2] 15/32 [Rest: 17]
[2] 16/32 [Rest: 16]
[2] 17/32 [Rest: 15]
[2] 18/32 [Rest: 14]
[2] 19/32 [Rest: 13]
[2] 20/32 [Rest: 12]
------------------------------
Block: 3/3.2
[3] 21/32 [Rest: 11]
[3] 22/32 [Rest: 10]
[3] 23/32 [Rest: 9]
[3] 24/32 [Rest: 8]
[3] 25/32 [Rest: 7]
[3] 26/32 [Rest: 6]
[3] 27/32 [Rest: 5]
[3] 28/32 [Rest: 4]
[3] 29/32 [Rest: 3]
[3] 30/32 [Rest: 2]
------------------------------
Block: 4/3.2
[4] 31/32 [Rest: 1]
[4] 32/32 [Rest: 0]
------------------------------

всего $ = 32; // В порядке

$ total = 31; // Я не вижу Блок 4

Спасибо !!

1 Ответ

0 голосов
/ 09 марта 2020

Я думаю, что у меня есть, спасибо за ответы:)

  $start = 0;
    $total = 10;
    $chunksize=10;
    $block = 1;
    while ($start <= $total){

        echo "Block: ".$block."/".ceil($total/($chunksize-1)).PHP_EOL;

        if($start+$chunksize <= $total){
            $limit = $start+$chunksize;
        }else{
            $limit = $total+1;
        }

        for ($start; $start < $limit; $start++){
           echo "[".$block."] ".$start."/".$total." [Rest: ".($total-$start)."] " .PHP_EOL;
        }

        echo "------------------------------".PHP_EOL;

        $block++;
    }
...