-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy patharray-to-columns.php
64 lines (48 loc) · 1.33 KB
/
array-to-columns.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
//TODO - move this into a github repo someday
/**
* @param array $items
* @param int $columnsRequired
* @return array
*/
public function getColumns($items, $columnsRequired)
{
$columnCounts = $this->_getColumnCounts($items, $columnsRequired);
$columns = $this->_getColumns($items, $columnCounts);
return $columns;
}
/**
* @param array $items
* @param int $columnsRequired
* @return array
*/
protected function _getColumnCounts($items, $columnsRequired)
{
$minItemsPerColumn = floor(count($items) / $columnsRequired);
$maxItemsPerColumn = $minItemsPerColumn + 1;
$numberOfMinColumns = count($items) % $columnsRequired;
$columnCounts = array();
for ($columnNumber = 0; $columnNumber < $columnsRequired; $columnNumber++) {
if ($columnNumber < $numberOfMinColumns) {
$columnCounts[] = $maxItemsPerColumn;
} else {
$columnCounts[] = $minItemsPerColumn;
}
}
return $columnCounts;
}
/**
* @param array $items
* @param array $columnCounts
* @return array
*/
protected function _getColumns($items, $columnCounts)
{
$columns = array();
$itemsProcessed = 0;
foreach ($columnCounts as $columnCount) {
$columns[] = array_slice($items, $itemsProcessed, $columnCount);
$itemsProcessed += $columnCount;
}
return $columns;
}