【问题标题】:Dynamically use column names from fetched data query array动态使用获取的数据查询数组中的列名
【发布时间】:2015-06-16 00:28:58
【问题描述】:

我有一个从数据库查询中获取数据的数组:

Array
(
    [0] => stdClass Object
        (
            [dataid] => 925977
            [camp_id] => 2003001
            [cid] => 
            [userid] => ushio12
            [ip_client] => 36.74.213.75
            [register_time] => 2015-04-01 22:39:04
            [country] => Indonesia
            [game_name] => TOUCH
            [server] => SALSA
            [nominal] => Rp 100000
            [logintime] => 2015-04-01 22:39:12
        )
    //...    
    [2] => stdClass Object
        (
            [dataid] => 929703
            [camp_id] => 2003001
            [cid] => 
            [userid] => fiqri179
            [ip_client] => 125.162.70.16
            [register_time] => 2015-04-02 23:40:23
            [country] => Indonesia
            [game_name] => TOUCH
            [server] => K-POP
            [nominal] => Rp 100000
            [logintime] => 2015-04-02 23:40:26
        )

)

到目前为止,基于上面的数组结果,我手动获取视图中的数据,如下所示:

<tr>
    <th>dataid</td>
    <th>camp_id</td>
    <th>cid</td>
    <th>ip_client</td>
    <th>register_time</td>
    <th>country</td>
    <th>game_name</th>
    <th>server</th>
</tr>

<?php
if(isset($result))
    {
        foreach ($result as $row)
            {
                echo "<tr>"; 
                echo "<td>".$row->dataid."</td>";  
                echo "<td>".$row->camp_id."</td>";  
                echo "<td>".$row->cid."</td>";  
                echo "<td>".$row->ip_client."</td>";  
                echo "<td>".$row->register_time."</td>";  
                echo "<td>".$row->country."</td>";  
                echo "<td>".$row->game_name."</td>";  
                echo "<td>".$row->server."</td>";  
                echo "</tr>"; 
            }
    }
?>

这是因为我知道用户会搜索什么信息。

但是,这一次,我不知道用户将搜索什么(返回哪些列)。他们可能只搜索某些特定信息或整个信息,因此数组结果将包含比现在更少的列或其他列。

所以我的问题是,如何根据用户尝试搜索的键(列名)数组自动生成视图,以便&lt;th&gt;".$key."&lt;/th&gt; 是动态的?

【问题讨论】:

    标签: php database foreach


    【解决方案1】:

    这应该适合你:

    在这里,我只是将数组中索引为 0 的第一个 stdClass 转换为数组,然后我可以使用 array_keys() 获取所有键。

    <?php
    
        $columns = array_keys((array)$result[0]);
    
        echo "<tr>";
        foreach($columns as $column)
            echo "<th>$column</th>";
        echo "</tr>";
    
    ?>
    

    编辑:

    你可以像这样对行做同样的事情:

    foreach ($result as $row) {
        echo "<tr>"; 
        foreach($columns as $column)
            echo "<td>" . $row->$column . "</td>";
        echo "</tr>"; 
    }
    

    【讨论】:

    • 里齐尔,谢谢。它可以找到&lt;th&gt; 或列名。我可以知道如何回显每列的 $rows 吗?
    • 问题是我们不知道那里存在的列的键(列名)。
    • @yal 更新了我的答案!只需使用与列名相同的方式来访问值
    • @Rizier123 :只是一个更正。 echo "&lt;th&gt;$column&lt;/td&gt;"echo "&lt;th&gt;$column&lt;/th&gt;";
    • @yal 这里有一个小演示:ideone.com/VM3vHE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2011-11-01
    • 1970-01-01
    • 2015-10-18
    • 2013-05-19
    • 2019-02-12
    相关资源
    最近更新 更多