Как распределить значения массива в трех столбцах?

Мне нужен этот выход.

1 3 5 2 4 6 

Я хочу использовать функцию array(1,2,3,4,5,6) типа array(1,2,3,4,5,6) . Если я отредактирую этот массив подобно array(1,2,3) , это означает, что вывод должен отображаться как

 1 2 3 

Концепция не более 3-х столбцов. Если мы дадим array(1,2,3,4,5) , это означает, что выход должен быть

 1 3 5 2 4 

Предположим, что мы дадим array(1,2,3,4,5,6,7,8,9) , то это означает, что выход

 1 4 7 2 5 8 3 6 9 

то есть максимум 3 столбца. Зависит от данного ввода, строки будут созданы с тремя столбцами.

Это возможно с PHP? Я занимаюсь небольшими исследованиями и разработками в функциях массива. Я думаю, что это возможно. Ты мне поможешь?

Для получения дополнительной информации:
* ввод: array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
* вывод:

 1 6 11 2 7 12 3 8 13 4 9 14 5 10 

Вы можете сделать цикл, который автоматически вставляет новую строку для каждого из трех элементов:

 $values = array(1,1,1,1,1); foreach($values as $i => $value) { printf('%-4d', $value); if($i % 3 === 2) echo "\n"; } 

EDIT: Поскольку вы добавили дополнительную информацию, вот что вы хотите:

 $values = array(1,2,3,4,5); for($line = 0; $line < 2; $line++) { if($line !== 0) echo "\n"; for($i = $line; $i < count($values); $i+=2) { printf('%-4d', $values[$i]); } } 

И если вы хотите связать все это с функцией:

 function print_values_table($array, $lines = 3, $format = "%-4d") { $values = array_values($array); $count = count($values); for($line = 0; $line < $lines; $line++) { if($line !== 0) echo "\n"; for($i = $line; $i < $count; $i += $lines) { printf($format, $values[$i]); } } } 

EDIT 2: Вот модифицированная версия, которая ограничит число столбцов до 3.

 function print_values_table($array, $maxCols = 3, $format = "%-4d") { $values = array_values($array); $count = count($values); $lines = ceil($count / $maxCols); for($line = 0; $line < $lines; $line++) { if($line !== 0) echo "\n"; for($i = $line; $i < $count; $i += $lines) { printf($format, $values[$i]); } } } 

Итак, следующее:

 $values = range(1,25); print_array_table($values); 

Выведет это:

 1 10 19 2 11 20 3 12 21 4 13 22 5 14 23 6 15 24 7 16 25 8 17 9 18 

Одним из решений является разбиение массива на куски, представление столбцов, а затем печать значений в порядке строк:

 $cols = array_chunk($arr, ceil(count($arr)/3)); for ($i=0, $n=count($cols[0]); $i<$n; $i++) { echo $cols[0][$i]; if (isset($cols[1][$i])) echo $cols[1][$i]; if (isset($cols[2][$i])) echo $cols[2][$i]; } 

Если вы не хотите разделить свой массив, вы также можете сделать это напрямую:

 for ($c=0, $n=count($arr), $m=ceil($n/3); $c<$m; $c++) { echo $arr[$c]; for ($r=$m; $r<$n; $r+=$m) { echo $arr[$c+$r]; } } 
 $a = array(1,2,3,4,5); "{$a[0]} {$a[1]} {$a[2]}\n{$a[3]} {$a[4]}"; 

или

 $a = array(1,2,3,4,5); "{$a[0]} {$a[1]} {$a[2]}".PHP_EOL."{$a[3]} {$a[4]}"; 

или

 $a = array(1,2,3,4,5); $second_row_start = 3; // change to vary length of rows foreach( $a as $index => $value) { if($index == $second_row_start) echo PHP_EOL; echo "$value "; } 

или, возможно, если вы хотите, чтобы более длинный массив разбился на столбцы из 3?

 $a = array(1,2,3,4,5,6,7,8,9,10,11,12,13); $row_length = 3; // change to vary length of rows foreach( $a as $index => $value) { if($index%$row_length == 0) echo PHP_EOL; echo "$value "; } 

который дает

 1 2 3 4 5 6 7 8 9 10 11 12 13 

одно решение: ваш массив имеет N элементов, и вам нужно 3 столбца, поэтому вы можете получить значение каждой ячейки с помощью $ myarray [column_index + (N / 3) + line_index] (с одним или двумя циклами для столбцов и строк, по крайней мере, для строк) Я надеюсь, что это поможет вам

Вот что я взбесился. Я уверен, что это было бы легче выполнить, если бы вы использовали HTML-списки, я предположил, что вы не можете их использовать.

 $arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15, 16); $max = count($arr); $cols = 3; $block = ceil($max / $cols); for ($i = 0; $i < $block ; $i++) { echo $arr[$i] . ' '; for ($j = 1; $j < $cols; $j++) { $nexKey = $i + $block * $j; if (!isset($arr[$nexKey])) break; echo $arr[$nexKey] . ' '; } echo '<br>'; } 

ПРИМЕЧАНИЕ . Вы можете легко реорганизовать код внутри цикла, который использует переменную $nexkey , превратив его в сам цикл, чтобы он работал для любого количества столбцов. Я его жестко закодировал.

Использует петли сейчас.