@kolomat

Как правильно нарезать массив?

Добрый день, подскажите по такому вопросу. Есть исходящий массив, пример
Array
(
    [0] => Array
        (
            [email] => vin-tom-cpmsd@i.ua
            [company_id] => 36331699
        )

    [1] => Array
        (
            [email] => kryukovska@inbox.ru
            [company_id] => 08564328
        )

    [2] => Array
        (
            [email] => podgorna2@gmail.com
            [company_id] => 44082852
        )

    [3] => Array
        (
            [email] => alecs.s@i.ua
            [company_id] => 21724512
        )

В целом массив состоит из 8к. Есть еще один массив
$send_to = [
                'subject' => $template['subject'],
                'template' => array(
                    'id' => $template['template_id']
                ),
                'from' => array(
                    'name' => 'email',
                    'email' => 'email@email.ua',
                )
            ];

Суть проблемы в чем, на API нужно передать массив в котором за один запрос максимум 500 адресатов можно отдать. Структура массива такая
Array
(
    [subject] => 
    [template] => Array
        (
            [id] => 73623
        )

    [from] => Array
        (
            [name] => email
            [email] => email@email.org.ua
        )

    [to] => Array
        (
            [0] => Array
                (
                    [email] => vin-tom-cpmsd@i.ua
                )

            [1] => Array
                (
                    [email] => kryukovska@inbox.ru
                )

            [2] => Array
                (
                    [email] => podgorna2@gmail.com
                )

            [3] => Array
                (
                    [email] => alecs.s@i.ua
                )

Написал подобную конструкцию
$perRequest = 500;

            for ($i = 0; $i < count($emails); $i += $perRequest) {
                $currentNodes = array_slice($emails, $i, $perRequest);

               foreach ($currentNodes as $node) {
                        $send_to['to'][] = array('email' => $node['email']);
                        $ids[] = array('company_id' => $node['company_id']);
                }

                echo '<pre>' . print_r($send_to, true) . '</pre>';
            }

В $currentNodes все нарезает нормально ровно по 500, но в конечно send_to я получаю ровно 16 массивов(8000/500)бно все они одинаковы и состаят исключительно из первых 500 email. Подскажите что я делаю неправильно или в целом вообще как лучше можно сделать?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@rotarepmipoleved
Вы берете срез с одного и того же массива, не удаляя уже отработанные элементы из исходного массива.

В этом случае лучше присмотреться к array_chunk.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы