如何合并表的列,如果具有相同的值,并在UI上显示与合并相同的列?

问题描述 投票:-1回答:1

我有下表:

=============================================
Probe Name    IP Address         Credentials
=============================================
NetApp       192.168.20.104    abc/abc123
---------------------------------------------       
VMware       192.168.20.219    abc/abc123   
---------------------------------------------       
NetApp       192.168.20.143    admin/admin
---------------------------------------------

我想合并具有相同值的列并将其显示为一个,如下表所示。所以我想使用HTML / PHP显示O / P,例如列“探测名称”数据“NetApp”合并在一行中。

=============================================
Probe Name    IP Address         Credentials
=============================================
             192.168.20.104    abc/abc123
NetApp       ---------------------------------      
             192.168.20.143    admin/admin
---------------------------------------------
VMware       192.168.20.219    abc/abc123   
---------------------------------------------

代码片段:

        public function runSql(){


        $sql = "select probe_name from probe_info group by probe_name, ip_address, credential, prerequisite";
        $stmt = $this->db->prepare($sql);
        $stmt->execute();

        if($stmt->rowCount() > 0){

            $row = $stmt->fetch(PDO::FETCH_ASSOC) ;

            return $row['probe_name'];
        }


    }


    public function displayData($sql) {

        try {

            //echo "in displaydata fun";

            $probe = crud::runSql();

            $stmt = $this->db->prepare($sql);
            $stmt->execute();

            if($stmt->rowCount() > 0){

                while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

                    //print_r($row['credential']);

                    ?>
                    <meta charset="UTF-8">
                    <tr>
                        <!-- td><?/*php if (isset($row['ID'])) { print_r($row['ID']); } */?></td -->
                        <!-- td><?php //if (isset($row['probe_name'])) { //echo "<strong>"; print ($row['probe_name']) ; echo "</strong>" ;} ?></td -->
                        <td><?php if (isset($row['probe_name'])) { echo $probe_name; } ?></td>
                        <td><?php if (isset($row['ip_address'])) { print_r($row['ip_address']); } ?></td>
                        <td><?php if (isset($row['credential'])) { print_r($row['credential']); } ?></td>
                        <td><?php if (isset($row['prerequisite'])) { print_r($row['prerequisite']); } ?></td>
                        <td><a href="" title="Edit probe info"><i class="glyphicon glyphicon-edit"></i></a></td>
                        <td><a href="" title="Delete probe record"><i class="glyphicon glyphicon-remove-circle"></i></a></td>
                    </tr>  


                    <?php
                }
            }

        } catch (Exception $ex) {
            echo "Message -".$ex.getMessage();
            }
    } 
php html5
1个回答
0
投票

您可以使用函数array_reduce和使用关联数组将PHP中的行“分组”:

array_reduce manualassociative arrays manual

$groups = array_reduce($queryRows, function($groupArray, $row) {
    if (!array_key_exists($row['Probe Name'], $groupArray) {
        $groupArray[$row['Probe Name']] = [];
    }
    $groupArray[$row['Probe Name']][] = $row;
    return $groupedArray;
}, []);

该函数迭代数组$queryRows并在执行此操作时动态创建新的关联数组$groupArray。在每次迭代中,检查$row['Probe name']中的值是否已经是$groupedArray中的一个键。如果不是,则将其设置为新密钥。然后,该行将添加到关联数组中的该键。

这将创建以下数据结构:

$groups = [
    'NetApp' => [
        [
            'Probe Name' => 'NetApp',
            'IP Address' => '192.168.20.104',
            'Credentials' => 'abc/abc123',
        ],
        [
            'Probe Name' => 'NetApp',
            'IP Address' => '192.168.20.143',
            'Credentials' => 'admin/admin',
        ]
    ],
    'VMware' => [
        [
            'Probe Name' => 'VMware',
            'IP Address' => '192.168.20.219',
            'Credentials' => 'abc/abc123',
        ]
    ]
];

有关详细信息,请阅读提供的手册。

© www.soinside.com 2019 - 2024. All rights reserved.