按多个子项将多维数组拆分为列

时间:2012-05-09 18:44:09

标签: php split grouping

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

['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

1 个答案:

答案 0 :(得分: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 )    )

等等。