Php 按子级数将多维数组拆分为列

Php 按子级数将多维数组拆分为列,php,split,grouping,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]。分为三列应

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

['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])
我不确定我是否以正确的方式处理这个问题,或者是否有更好的方法来解决这个问题

编辑:
我正在尝试编写一个页面,其中列表按照维基百科分类的标题进行分组,例如:。

假设
$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 )    )

诸如此类。

你能更具体地描述一下你的数组分块算法吗?我还没有什么。我不太确定从哪里开始。作为对你编辑的回应:为什么你首先需要像这样把它们分块?你只是想让它的前端看起来更好吗?如果是这样,只需在css或js中使用不同的样式即可。我可以,但到目前为止,我看到的所有示例都建议添加类名,这是我无法使用可变长度列表的。问题是我需要的物品的顺序是一样的,这更难。我想:你们可以先做一个计数数组<代码>$counts=array_-map(函数($x){返回计数($x);},$input)然后
asort($counts)
并使用
array\u chunk()
拆分
$counts
数组。然后,您必须通过
$input
循环,并使用
array\u search()
查看每个键的
$counts
子数组。乏味但并非不可能。