У меня есть динамическое количество элементов, в которых мне нужно разделить на столбцы. Допустим, мне дано это:
array("one", "two", "three", "four", "five", "six", "seven", "eight")
Мне нужно сгенерировать это:
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
</ul>
<ul>
<li>five</li>
<li>six</li>
<li>seven</li>
<li>eight</li>
</ul>
Вот некоторые правила:
- если нет предметов, я не хочу ничего выплевывать
- если есть 16 или менее 16 предметов, id как 4 предмета на
<ul>
- если есть более 16 предметов, я бы хотел, чтобы они были распределены равномерно
- мне придется переупорядочить элементы в алфавитном порядке. если есть 17 элементов, 17-й элемент должен будет перейти в первый столбец, но все должно быть переупорядочено.
Что у меня есть до сих пор:
function divide( $by, $array ) {
14 $total = count( $array );
15 $return = array();
16 $index=0;
17 $remainder = $total % $by !== 0;
18 $perRow = $remainder ?
19 $total / $by + 1:
20 $total / $by
21 ;
22
23 for ( $j = 0; $j<$by; $j++ ) {
24 //$return[] = array();
25
26 if ( $index == 0 ) {
27 $slice = array_slice( $array, 0, $perRow );
28 $index = $perRow;
29 $return[$j] = $slice;
30 } else {
31 $slice = array_slice( $array, $index, $perRow );
32 $index = $index+$perRow;
33 $return[$j] = $slice;
34 }
35 }
}
Я подаю число, например, разделитель( 4, $arrRef ), число определяет количество столбцов, но мне нужно провести рефакторинг, чтобы он определял количество столбцов.