我在php中有这样的数组:
$arr = [
[
"group": 1,
"name": John
],
[
"group": 1,
"name": Luke
],
[
"group": 1,
"name": Peter
],
[
"group": 2,
"name": Pia
]
]
html表中的预期输出:
GROUP | NAME
------|-----
| John
1 | Luke
| Peter
------|-----
2 | Pia
我试图解决foreach
,但我无法弄明白。以下是我试过的最后一个代码:
<table>
<tr>
<th>GROUP</th>
<th>NAME</th>
</tr>
<tbody>
<?php $group = ''; ?>
<?php foreach($results AS $result) : ?>
<tr>
<td>
<?php if($group !== $result['group']): ?>
<?= $result['group'] ?>
<?php endif; ?>
</td>
<td>
<ul>
<li><?= $result['name'] ?></li>
</ul>
</td>
</tr>
<?php $group = $result['group']; ?>
<?php endforeach; ?>
</tbody>
</table>
但结果是:
GROUP | NAME
------|-----
1 | John
------|-----
| Luke
------|-----
| Peter
------|-----
2 | Pi
我需要将其显示为预期输出。
请帮忙,谢谢
答案 0 :(得分:2)
你需要的只是一点点计算和一些CSS魔法。在阵列下方和表格上方的任何位置添加第一个代码块。
$d = array();
foreach($results as $c){
if(array_key_exists($c['group'],$d)){
$d[$c['group']]++;
}else{
$d[$c['group']] = 1;
}
}
然后将你的tbody代码更改为:
<tbody>
<?php $group = ''; ?>
<?php foreach($results AS $result) : ?>
<?php $t = $result['group']; ?>
<tr>
<?php if($group !== $result['group']): ?>
<?php echo '<td rowspan="' . $d[$t] . '" style="vertical-align:middle;">'; ?>
<?= $result['group'] ?>
</td>
<?php endif; ?>
<td>
<ul>
<li><?= $result['name'] ?></li>
</ul>
</td>
</tr>
<?php $group = $result['group']; ?>
<?php endforeach; ?>
</tbody>
请注意,这只是一个应该有效的模型,但它非常基本,你需要美化它一点。
此外,如果您按照“群组”对数组进行分组,而不是让每个人都持有群组,则可以删除计数。
答案 1 :(得分:2)