我需要这个输出..
1 3 5
2 4 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列。取决于给定的输入,将使用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
答案 0 :(得分:5)
你可以做一个循环,在每三个元素上自动插入一个新行:
$values = array(1,1,1,1,1);
foreach($values as $i => $value) {
printf('%-4d', $value);
if($i % 3 === 2) echo "\n";
}
编辑:由于您添加了更多信息,因此您需要:
$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]);
}
}
}
编辑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
答案 1 :(得分:5)
一种解决方案是将数组切割成块,表示列,然后按行顺序打印值:
$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];
}
}
答案 2 :(得分:3)
$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列<?p>
$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
答案 3 :(得分:1)
一个解决方案是: 你的数组有N个元素,你想要3列,所以你可以用$ myarray [column_index +(N / 3)+ line_index]得到每个单元格的值(对于列和行有一个或两个循环,至少对于行) 我希望这能帮到您 再见
答案 4 :(得分:1)
这是我掀起的事情。我很确定如果您使用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
变量的循环内的代码,使其成为循环本身,以便它适用于任意数量的列。我已经硬编码了。 击>
现在使用循环。