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]です。3つの列に分割すると、次のようになります。

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 に答える