【发布时间】:2012-11-20 19:10:40
【问题描述】:
我有一个动态数量的项目,我需要将这些项目分成几列。假设我得到了这个:
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 像每个
<ul>4 个项目 - 如果超过 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 }
}
我输入了一个数字,比如 divide(4, $arrRef),这个数字决定了列数,但我需要重构它来确定列数
【问题讨论】:
-
有趣的问题。我建议您不要立即接受答案,因为用一个非常好的答案来回答这个问题可能需要一些时间。
-
"如果超过 16 件,我希望它均匀分布"?定义“均匀分布”。
-
您的条件不是自洽的 re:排序。您希望连续项目按行顺序(由示例暗示)还是按列顺序(通过“如果有 17 个项目,第 17 个项目将需要转到第一列”来暗示)
-
正如 Karl 所建议的,我认为应该有更多的规则。例如,如果有 100 个项目,应该有多少列? 4、5、10 等等...?
-
这是一个很常见的问题,实际上是分页。
标签: php pagination