php чанк массивы в партии - PullRequest
0 голосов
/ 23 мая 2018

У меня есть массив с, скажем, 400 (но может быть что угодно) именами, которые я хочу отправить в API, но API получает максимум 200 запросов за раз, как я делю свой массив так, чтобы для каждого 200-го элемента, я выполняю действие?

Вот что у меня есть, вместо того, чтобы делать запрос API, я просто пытаюсь вывести массив на страницу.

<?php

for ($i = 0; $i <= $smsListLimit; $i++)
    {
    if ($i <= 199)
        {
        array_push($newarray, $smsList[$i]);
        if ($i == 199)
            {
            echo “ < pre > “;
            var_dump($newarray);
            echo “ < / pre > “;
            echo “!!!!!!!BREAK!!!!!!!“;
            }
        }
    elseif ($i > 199 && $i <= 399)
        {
        unset($newarray);
        array_push($newarray, $smsList[$i]);
        if ($i == $smsListLimit)
            {
            echo “ < pre > “;
            var_dump($newarray);
            echo “ < / pre > “;
            echo “!!!!!!!BREAK!!!!!!!“;
            }
        }
    }

die();
?>

Это возвращаетпервые 200 в массив, но не остаток - но независимо от того, если входящий массив был 5000, я не хочу писать массивный оператор if для каждых 200.

Кто-нибудь предлагает какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Если вам не требуется возвращать большой массив меньших массивов, вы можете создать такую ​​функцию для обработки в пакетах:

https://totaldev.com/php-process-arrays-batches/

Функция выглядит следующим образом:

// Iterate through an array and pass batches to a Closure
function arrayBatch($arr, $batchSize, $closure) {
    $batch = [];
    foreach($arr as $i) {
        $batch[] = $i;
        // See if we have the right amount in the batch
        if(count($batch) === $batchSize) {
            // Pass the batch into the Closure
            $closure($batch);
            // Reset the batch
            $batch = [];
        }
    }
    // See if we have any leftover ids to process
    if(count($batch)) $closure($batch);
}

Вы можете использовать его так:

// Use array in batches
arrayBatch($my_array, 200, function($batch) {
    // Do whataver you need to with the $batch of 200 items here...
    // Or change the batch size from 200 to any other amount you need
    print_r($batch);
});
0 голосов
/ 23 мая 2018

Вы бы использовали array_chunk: http://php.net/manual/en/function.array-chunk.php

exe.:

$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));

результат:

 Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...