PHP:创建有条件的表

时间:2018-03-08 16:11:32

标签: php foreach html-table

我在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

我需要将其显示为预期输出。

请帮忙,谢谢

2 个答案:

答案 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)

您需要先创建组,如下所示

shipper

哪个会给出输出,

enter image description here