创建相等宽度的列

时间:2011-05-29 02:15:20

标签: php arrays list

所以我遇到了一个无法解决问题的问题。

我正在创建一个购物清单,分为十个不同长度的类别。 (所有项目都来自数据库)。我在使用单列时让它工作,但我必须将列表分成四列。代码应该决定哪些类别应该去哪里,以便四列具有最多可能的项目数。

This is what the list will look like when the code is working.

在这十个类别中,其中四个属于他们所属的特定类别。

我接近这个的方法是计算项目总数并将其除以4来计算每列的平均项目数。我将四个特殊类别放在各自的列中,并跟踪每列中现在有多少项目。

现在我仍然有六个不同大小的列。将它们放在最适合的列中的最佳方法是什么?由于某些类别比其他类别大得多,因此某些列可能有三个或四个类别。

更新:我发布此消息后,我意识到我应该找到包含最少项目的列并添加最大类别。这似乎会起作用。看起来Dave的建议也一样!

2 个答案:

答案 0 :(得分:1)

将4个“主要”类别写入列后,创建一个总共包含每列的数组:

$columnTotals = array(10,6,12,13)
//example - obviously you'd use count or something to get the totals

然后,按照从大到小的顺序对数组中的非特殊类别进行排序:

$subcatTotals = array(18,15,13,12,8,4);
//here, you'll have to get the totals, then use an array sort to order them
//probably want an associative array so you know which total matches which cat.

然后,在循环中,将第一个(最大的)子类别添加到最小列,并获得该列的新总计。

这应该为你提供最平坦的专栏 - 至少它已经在我尝试过的所有组成的例子中都有。

答案 1 :(得分:-1)

您的方法在今天的上下文中是最理想的。让我解释一下......

现在做的理想事情就是做一点计算并将列表分成行数和行数。列。

替代方案是CSS3方法。即,您可以通过PHP在一列中创建整个列表。在CSS方面,您可以指定新属性“column-count”。

但有问题。这尚未正确标准化。因此,您必须根据您的浏览器指定-moze-前缀和-webkit-前缀。但我不愿意这样做的原因是IE仍然不支持这一点。现在考虑所有用户的升级还为时过早。

更进一步,你应该修改你的分裂算法,以考虑类别标题。

希望这会有所帮助:)