PHP:使用条件创建表
我在php中有这样的数组:PHP:使用条件创建表,php,foreach,html-table,Php,Foreach,Html Table,我在php中有这样的数组: $arr = [ [ "group": 1, "name": John ], [ "group": 1, "name": Luke ], [ "group": 1, "name": Peter ], [ "group": 2, "name": Pia ] ] html表
$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>
我需要将其显示为大约预期的输出
请帮忙,谢谢你所需要的只是一点计数和一些CSS魔法。将第一块代码添加到数组下方和表上方的任意位置
$d = array();
foreach($results as $c){
if(array_key_exists($c['group'],$d)){
$d[$c['group']]++;
}else{
$d[$c['group']] = 1;
}
}
然后将您的车身代码更改为:
<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>
请注意,这只是一个模型,应该工作,但它是非常基本的,你需要适当地美化它一点
此外,如果您按“组”对阵列进行分组,而不是让每个人同时持有组,则可以删除计数。您需要先按如下方式创建组
<?php
$results = [
["group"=> 1,"name"=> "John"],
["group"=> 1,"name"=> "Luke"],
["group"=> 1,"name"=> "Peter"],
["group"=> 2,"name"=> "Pia"]
];
$newArr = array();
foreach ($results as $key => $value) {
$newArr[$value["group"]][] = $value["name"];
}
?>
<table border="1">
<thead>
<tr><th>GROUP</th><th>NAME</th></tr>
</thead>
<tbody>
<?php foreach($newArr as $group=>$values){ ?>
<tr>
<td><?php echo $group;?></td>
<td>
<ul style="margin: 5px;">
<?php
foreach($values as $key=>$name){
echo "<li>$name</li>";
}
?>
</ul>
</td>
</tr>
<?php } ?>
</tbody>
</table>
组名
这将产生输出
如果您也输入您的试用代码,您的问题会很好。@Epodax,您好,我更新了问题,请检查。thanksAh,看起来我们达成了相同的解决方案,虽然你的比我的漂亮多了。是的,你是对的。同样的解决方案是预期的,但1小时后的时间安排确实令人惊讶:)谢谢你的帮助,因为它对我来说更具可读性,我将接受这一回答@Epodax也谢谢你。我从你的回答中得到了一些想法;)
<?php
$results = [
["group"=> 1,"name"=> "John"],
["group"=> 1,"name"=> "Luke"],
["group"=> 1,"name"=> "Peter"],
["group"=> 2,"name"=> "Pia"]
];
$newArr = array();
foreach ($results as $key => $value) {
$newArr[$value["group"]][] = $value["name"];
}
?>
<table border="1">
<thead>
<tr><th>GROUP</th><th>NAME</th></tr>
</thead>
<tbody>
<?php foreach($newArr as $group=>$values){ ?>
<tr>
<td><?php echo $group;?></td>
<td>
<ul style="margin: 5px;">
<?php
foreach($values as $key=>$name){
echo "<li>$name</li>";
}
?>
</ul>
</td>
</tr>
<?php } ?>
</tbody>
</table>