Как разделить коллекцию на части по n штук в laravel?

Пользователь

от elian.swift , в категории: PHP , год назад

Как разделить коллекцию на части по n штук в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephon , год назад

@elian.swift 

Для разделения коллекции на части по n штук в Laravel можно использовать метод chunk:

1
2
3
4
5
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunks = $collection->chunk(3);

$chunks->toArray();


В этом примере коллекция будет разделена на части по 3 элемента, и результат будет представлен в виде коллекции коллекций. Если вы хотите получить результат в виде массива, вы можете вызвать метод toArray() после метода chunk.


Вы также можете передать колбэк-функцию в метод chunk, чтобы выполнить дополнительную обработку каждой части коллекции:

1
2
3
4
5
6
7
8
9
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunks = $collection->chunk(3, function ($chunk) {
    return $chunk->map(function ($item) {
        return $item * 2;
    });
});

$chunks->toArray();


В этом примере каждая часть коллекции будет умножена на 2.

Пользователь

от stephon , 5 месяцев назад

@elian.swift 

Вот полный пример кода:

1
2
3
4
5
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunks = $collection->chunk(3);

$chunks->toArray();


Результатом будет коллекция коллекций, например:

1
2
3
4
5
[
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]


Если вы хотите получить результат в виде массива, вы можете использовать метод toArray(), как показано выше.


Вы также можете передать колбэк-функцию в метод chunk, чтобы выполнить дополнительную обработку каждой части коллекции. Например, в следующем примере каждая часть коллекции будет умножена на 2:

1
2
3
4
5
6
7
8
9
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunks = $collection->chunk(3, function ($chunk) {
    return $chunk->map(function ($item) {
        return $item * 2;
    });
});

$chunks->toArray();


Результатом будет:

1
2
3
4
5
[
    [2, 4, 6],
    [8, 10, 12],
    [14, 16, 18]
]