我有一个 CodeIgniter 查询结果,有 28 条记录。
我的意思是根据这些记录创建一个 HTML 表,并从左到右按列打印数据。
换句话说,我想要制作7行4列。
我的伪代码是这样的:
<td colspan="4">
<?php
foreach ($damage_codes as $row) {
// Create a column. <td>
// create a row <tr>
// When this column have four row, create a next column again.
// So on, so on
echo . $row->DAMAGE_ID . " " . $row->NAMA_DAMAGE ;
}
?>
</td>
这是我现在的代码:
<?php
$i = 0;
foreach ($damage_codes as $row) : ?>
<?= ($i % 4 == 0) ? "<tr>" : false; ?>
<?= "<td>[".$row->DAMAGE_ID . "]" . $row->NAMA_DAMAGE . "</td>"; ?>
<?php
$i++;
endforeach;
echo "</tr>"?>
输出如下:
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 |
我怎样才能做到这样?
| 1 | 8 | 15 | 22 |
| 2 | 9 | 16 | 23 |
| 3 | 10 | 17 | 24 |
| 4 | 11 | 18 | 25 |
| 5 | 12 | 19 | 26 |
| 6 | 13 | 20 | 27 |
| 7 | 14 | 21 | 28 |
只需在 foreach 循环之外使用计数器变量来跟上它。
类似这样的:
<table>
<?php
$i = 0;
foreach ($damage_codes->result() as $row):
?>
<?= ($i % 4 == 0) ? "<tr>" : false; ?>
<?= "<td>".$row->DAMAGE_ID . " " . $row->NAMA_DAMAGE . "</td>;
<?= ($i % 4 == 0) ? </tr>" : false; ?>
<?php
$i++;
endforeach;
?>
</table>
也许这会对你有一点帮助
更新版本:
$arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
$md_arr = array();
$cols = 4;
$i = 0;
$col = 0;
$row = 0;
// first convert your single array to a multidimensional one
foreach ($arr as $k=>$v) {
$i++;
$md_arr[$row][$col] = $v;
$col++;
if( $i % $cols == 0 ){
$row++;
$col = 0;
}
}
function transpose($array) {
array_unshift($array, null);
return call_user_func_array('array_map', $array);
}
// then transpose your new multi array
$md_arr = transpose( $md_arr );
// last render the table with the transposed array
echo "<table>";
foreach ($md_arr as $k=>$v) {
echo "<tr>";
foreach ($v as $kk=>$vv) {
echo "<td>";
echo $md_arr[ $k ][ $kk ];
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
虽然从技术上讲,在循环时手动管理索引会提高性能,并且因为您的结果将是已知的小尺寸,但我建议简单地分块,然后转置数据。创建一个库方法或辅助函数来执行此重组操作(它不属于控制器、模型或视图层),然后视图可以迭代完全准备好的有效负载。
代码:(演示)
$damage_codes = range(1, 28);
$result = array_map(null, ...array_chunk($damage_codes, 7));
var_export($result);
输出:
array (
0 =>
array (
0 => 1,
1 => 8,
2 => 15,
3 => 22,
),
1 =>
array (
0 => 2,
1 => 9,
2 => 16,
3 => 23,
),
2 =>
array (
0 => 3,
1 => 10,
2 => 17,
3 => 24,
),
3 =>
array (
0 => 4,
1 => 11,
2 => 18,
3 => 25,
),
4 =>
array (
0 => 5,
1 => 12,
2 => 19,
3 => 26,
),
5 =>
array (
0 => 6,
1 => 13,
2 => 20,
3 => 27,
),
6 =>
array (
0 => 7,
1 => 14,
2 => 21,
3 => 28,
),
)