Давайте посмотрим, ближе ли это к отметке
function splitVerticalArrayIntoColumns($aInput, $iNumberOfColumns) {
//output array
$aOutput = array();
//the total length of the input array
$iInputLength = count($aInput);
//the number of rows will be ceil($iInputLength / $iNumberOfColumns)
$iNumRows = ceil($iInputLength / $iNumberOfColumns);
for($iInputIndex = 0; $iInputIndex < $iInputLength; $iInputIndex++) {
$iCurrentRow = $iInputIndex % $iNumRows;
$aOutput[$iCurrentRow][] = $aInput[$iInputIndex];
}
//return
return $aOutput;
}
Который - при выполнении таким образом:
$aList = array("a", "e", "d", "b", "c");
echo 'array("a", "e", "d", "b", "c")' . "\n\n";
print_r(splitVerticalArrayIntoColumns($aList, 3));
Дает:
array("a", "e", "d", "b", "c")
Array
(
[0] => Array
(
[0] => a
[1] => d
[2] => c
)
[1] => Array
(
[0] => e
[1] => b
)
)
Это еще не сортировка каждой строки, но разве это то, что вам нужно?
начать редактирование лицевой стороны
...или, конечно, array_chunk($aList, 3)
после того, как вы отсортировали его O_o
http://uk3.php.net/manual/en/function.array-chunk.php
Я оставлю все ниже для справки или чего-то еще - я полностью забыл о array_chunk ()
редактирование конечной лицевой стороны
Я бы использовал модуль в цикле, где вы подсчитываете индекс массива (после сортировки массива) - например, есливы пытаетесь разделить массив на 3 "столбца", вы можете попробовать что-то вроде:
if($iIndex % 3 == 0) {
//... create a new array
}
else {
//... add to an existing array
}
РЕДАКТИРОВАТЬ пример кода:
$aList = array("a", "e", "d", "b", "c");
sort($aList);
$iDesiredNumberOfColumns = 3;
$iListLength = count($aList);
$aListInColumns = array();
$iRowNumber = 0;
for($iIndex = 0; $iIndex < $iListLength; $iIndex++) {
$iColumnNumber = $iIndex % 3;
if($iIndex != 0 && $iColumnNumber == 0) {
$iRowNumber++;
}
$aListInColumns[$iRowNumber][$iColumnNumber] = $aList[$iIndex];
}
Просто запустил его на моем локальном сервере (иисправил опечатку), и он выдает следующее:
Array
(
[0] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => d
[1] => e
)
)
Возможно, есть более аккуратный способ сделать это (это немного процедурно), но он должен делать свою работу.