(PHP) Распространение содержимого массива равномерно по фиксированному числу столбцов

Я здесь схожу с ума – надеюсь, вы можете помочь мне понять это! То, что должно быть очень простой математикой, меня совершенно сбивает с толку.

$columns = 3; $items = range(1,20); $total = count($items); $col1 = ???; $col2 = ???; $col3 = ???; // $col1 must be an array of (1,2,3,4...) // $col2 must be an array of (8,9,10,11...) // $col3 must be an array of (15,16,17,18...) COL1 COL2 COL3 1 8 15 2 9 16 3 10 17 4 11 18 5 12 19 6 13 20 7 14 

Вышеприведенное является наглядным примером того, чего я пытаюсь достичь. В принципе, для любого заданного количества элементов в массиве и для любого заданного количества столбцов, как я могу создать n количество массивов (равное числу столбцов), которые по возможности равны по длине. Если равная длина невозможна (как в примере выше), они должны быть распределены как можно более равномерно, а последний массив должен быть самым коротким.

Любые рекомендации относительно того, как я построю $ col1 / 2/3 в приведенном выше примере, будут высоко оценены!

Пожалуйста, игнорируйте тот факт, что я использовал диапазон и целые числа для генерации массива – это просто для упрощения примера. Предположим, что массив будет содержать строки.

Спасибо за любую помощь!

Вы хотите использовать array_chunk , но вам нужно рассчитать размер блока:

 list($col1, $col2, $col3) = array_chunk($items, ceil($total / $columns)); 

Я думаю, вам может понадобиться array_chunk

 list($col1,$col2,$col3)=array_chunk($arrofstrings,$colcount); 
 $itemsInColumn = ceil($total / $columns); 
 $columns = 3; $items = range(1, 20); $rows = array_chunk($items, $columns); $columns = array(); foreach ($rows as $row) { for ($i = 0; $i < $columns; $i++) { $columns[$i][] = $row[$i]; } }