我有一组按字母名称分组的对象,即:
['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。
答案 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 ) )
等等。