Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:使用条件创建表_Php_Foreach_Html Table - Fatal编程技术网

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表

我在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>
我需要将其显示为大约预期的输出


请帮忙,谢谢

你所需要的只是一点计数和一些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>