0

我有一组按字母名称分组的对象,即:

['A' => array(obj, obj, obj), 'B' => array(obj), 'C' => array(obj, obj),
 'D' => array(obj, obj, obj, obj, obj), 'E' => array(obj, obj, obj, obj),...]

我试图找到一种方法,X根据每个数组中的对象数将此数组拆分为列(2 或 3)。我的例子的计数是[3, 1, 2, 5, 4]. 分成三列应该给我:

array([A,B,C], [D], [E])

我不确定我是否以正确的方式解决了这个问题,或者是否有更好的方法来解决这个问题。

编辑:我正在尝试编写一个页面,其中列表按维基百科类别的标题分组,例如:http ://en.wikipedia.org/wiki/Category:Arts 。

4

1 回答 1

0

假设$input是您的对象数组数组,并且$numColumns您想要多少列......

uasort( $input, function( $x, $y ){ return count( $y ) - count( $x ); } );
$columns = array_chunk( $input, (int)ceil( count( $input ) / $numColumns ), true );

这会根据子数组的长度对输入数组进行排序,然后将其拆分为$numColumns块。在此之后,$columns将是这样的:

0 => array(
    'B' => array( obj ),
    'C' => array( obj, obj ),
    'A' => array( obj, obj, obj )     ),
1 => array(
    'D' => array( obj, obj, obj, obj ),
    'E' => array( obj, obj, obj, obj, obj )    ),
2 => array(
    'F' => array( lots of objs ),
    'G' => array( lots and lots of objs )    )

等等。

于 2012-05-09T19:08:06.803 回答