【问题标题】:multidimensional array into table in PHPPHP中的多维数组到表中
【发布时间】:2017-08-04 10:51:01
【问题描述】:

我希望你能帮助我完成我的任务。我还是 PHP 语言的新手。我有这样一个案例:

<!DOCTYPE html>
<html>
<head>
  <style>
    table, th, td {
        border: 1px solid black;
        border-collapse: collapse;
    }
    th, td {
        padding: 5px;
        text-align: left;
    }
  </style>
</head>
<body>
<?php
$ub = array(
    array(
        "Fakultas Ilmu Komputer",
        array(
            "Jurusan Teknik Informatika",
            array(
                "Prodi Teknik Informatika",
                "Prodi Teknik Komputer",
                "Prodi Magister Ilmu Komputer"
            )
        ),
        array(
            "Jurusan Sistem Informasi",
            array(
                "Prodi Sistem Informasi",
                "Prodi Teknologi Informasi",
                "Prodi Pendidikan Teknologi Informasi"
            )
        )
    ),
    array(
        "Fakultas Kedokteran",
        array(
            "Jurusan Kedokteran",
            array(
                "Prodi Pendidikan Dokter"
            )
        ),
        array(
            "Jurusan Keperawatan dan Gizi",
            array(
                "Prodi Ilmu Keperawatan",
                "Prodi Ilmu Gizi",
                "Prodi Farmasi",
                "Prodi Kebidanan"
            )
        )
    )			
);		
?>
<table>
    <tr>
        <th>Fakultas</th>
        <th>Jurusan</th>
        <th>Program Studi</th>
    </tr>
</table>
</body>
</html>

而且结果一定是这样的:

我应该怎么做才能制作这样一张桌子?这个我试过了,还是不行:

for($baris = 0 ; $baris < 2 ; $baris++ ) {
    echo $ub[$baris][0] ; $baris++;} ?>
    </th>
    <th>
    <?php 
    for($barisa = 0 ; $barisa < 2 ; $barisa++ ) {
        echo $ub[$barisa+1][1];
        $barisa++;
    }
    ?>
    </th>
    <th>
    <?php 
    for($barisb = 0 ; $barisb < 4 ; $barisb++ ) {
        echo $ub[$barisb+1][2] ;
        $barisb++;
    }
    ?>
    </th>

谢谢。

【问题讨论】:

  • 你需要学习rowspan。访问此w3schools.com/tags/att_td_rowspan.asp
  • 我的意思不仅是行跨度,我在使用循环代码时遇到问题。
  • 好的,然后等待
  • "Fakultas Ilmu Komputer", 应该向下一行,这样可以正确地将其放入下一个子数组中。请更正您的示例。
  • 请使用来自tabletag.net的动态html格式和foreach循环的代码

标签: php arrays multidimensional-array html-table


【解决方案1】:

你想要的就是这个,

https://gist.github.com/hsharma-lsquared/94f10b8182e5ef3e8c465a2cd5159edb

如果它对你有用,请告诉我......

【讨论】:

    【解决方案2】:

    你应该稍微改变你的数组,这样所有的列都在同一级别上:

      <?php
        $ub = array(
          "Fakultas Ilmu Komputer" => array(
                                        array(
                                            "Jurusan Teknik Informatika",
                                            array(
                                                "Prodi Teknik Informatika",
                                                "Prodi Teknik Komputer",
                                                "Prodi Magister Ilmu Komputer"
                                            )
                                        ),
                                        array(
                                            "Jurusan Sistem Informasi",
                                            array(
                                                "Prodi Sistem Informasi",
                                                "Prodi Teknologi Informasi",
                                                "Prodi Pendidikan Teknologi Informasi"
                                            )
                                        )
                                    ),
        "Fakultas Kedokteran" => array(
                                        array(
                                            "Jurusan Kedokteran",
                                            array(
                                                "Prodi Pendidikan Dokter"
                                            )
                                        ),
                                        array(
                                            "Jurusan Keperawatan dan Gizi",
                                            array(
                                                "Prodi Ilmu Keperawatan",
                                                "Prodi Ilmu Gizi",
                                                "Prodi Farmasi",
                                                "Prodi Kebidanan"
                                            )
                                        )
                                    )
      );
    
        ?>
    

    之后,您必须跟踪表的所有“内部行”并打印嵌套在最深循环中的行。像这样:

    <?php
    foreach($ub as $fakultas => $jurusan) {
        $fakultasLine = true;
    
        // calculate inside rows per row
        $insideRows = 0;
        foreach($jurusan as $program) {
            foreach($program[1] as $studi) {
                $insideRows++;
            }
        }
        foreach($jurusan as $program) {
            $jurusanLine = true;
            foreach($program[1] as $studi) {
                echo '<tr>';
                if($fakultasLine) {
                    echo '<td rowspan="' . $insideRows . '">' . $fakultas . '</td>';
                    $fakultasLine = false;
                }
                if($jurusanLine) {
                    echo '<td rowspan="' . count($program[1]) . '">' . $program[0] . '</td>';
                    $jurusanLine = false;
                }
                echo '<td>' . $studi . '</td>';
                echo '</tr>';
            }
        }
    }
    ?>
    

    你完整的 sn-p 看起来有点像这样:

    <!DOCTYPE html>
    <html>
    
    <head>
      <style>
        table,
        th,
        td {
          border: 1px solid black;
          border-collapse: collapse;
        }
    
        th,
        td {
          padding: 5px;
          text-align: left;
        }
      </style>
    </head>
    
    <body>
    
      <?php
        $ub = array(
          "Fakultas Ilmu Komputer" => array(
                                        array(
                                            "Jurusan Teknik Informatika",
                                            array(
                                                "Prodi Teknik Informatika",
                                                "Prodi Teknik Komputer",
                                                "Prodi Magister Ilmu Komputer"
                                            )
                                        ),
                                        array(
                                            "Jurusan Sistem Informasi",
                                            array(
                                                "Prodi Sistem Informasi",
                                                "Prodi Teknologi Informasi",
                                                "Prodi Pendidikan Teknologi Informasi"
                                            )
                                        )
                                    ),
        "Fakultas Kedokteran" => array(
                                        array(
                                            "Jurusan Kedokteran",
                                            array(
                                                "Prodi Pendidikan Dokter"
                                            )
                                        ),
                                        array(
                                            "Jurusan Keperawatan dan Gizi",
                                            array(
                                                "Prodi Ilmu Keperawatan",
                                                "Prodi Ilmu Gizi",
                                                "Prodi Farmasi",
                                                "Prodi Kebidanan"
                                            )
                                        )
                                    )
      );
    
        ?>
    
        <table>
          <tr>
            <th>Fakultas</th>
            <th>Jurusan</th>
            <th>Program Studi</th>
          </tr>
    
    <?php
    foreach($ub as $fakultas => $jurusan) {
        $fakultasLine = true;
    
        // calculate inside rows per row
        $insideRows = 0;
        foreach($jurusan as $program) {
            foreach($program[1] as $studi) {
                $insideRows++;
            }
        }
        foreach($jurusan as $program) {
            $jurusanLine = true;
            foreach($program[1] as $studi) {
                echo '<tr>';
                if($fakultasLine) {
                    echo '<td rowspan="' . $insideRows . '">' . $fakultas . '</td>';
                    $fakultasLine = false;
                }
                if($jurusanLine) {
                    echo '<td rowspan="' . count($program[1]) . '">' . $program[0] . '</td>';
                    $jurusanLine = false;
                }
                echo '<td>' . $studi . '</td>';
                echo '</tr>';
            }
        }
    }
    ?>
    
    
        </table>
    </body>
    
    </html>
    

    【讨论】:

    • 你展示了一些比我玩的更好的技术。您可以使用foreach($jurusan as $program){$insideRows+=count($program[1]);} 删除一个for 循环。无论如何都做得很好。
    • @mickmackusa 我知道......但这更具可读性。递归方法可以使用更少的代码行来打印它,但不会解释...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多