【问题标题】:iterating for loop to form a custom html table迭代 for 循环以形成自定义 html 表
【发布时间】:2020-02-01 03:25:57
【问题描述】:

我想通过 db 查询在 php 中形成一个自定义 html 表。我的 sql 查询是

$query = db_select('taxonomy_term_data','td');
    $query->join('drone','dg','dg.tid = td.tid ');
    $query->fields('td',array('tid','name'));
    $query->fields('dg',array('drone_name'));
    $result=$query->execute()->fetchAll(); 

查询返回的数据如下:

Drone Name        Drone Assigned
Huge                DJI
Huge                Parrot
Beginner            Skydio
Beginner            Insitu
Beginner            EHANG
 $drone_table='<br/>
  <table id =  width="40%" cellspacing="5" cellpadding="5" border="1" align="center";">
    <th>Drone Name</th> 
    <th>Drones Assigned</th>';

我写了一个for循环语句

foreach ($result as $ts){

      $drones_assigned[] = $ts->name;
      $drn_name = $ts->drone_name;      

    $com_arr = implode(",",$drone_assigned);

    $drone_table.='<tr>
    <td>'.$drn_name.'</td>
    <td>'.$com_arr.'</td>
    </tr>';
}

这不构成我想要的表格。 t 形成一个表格,由所有分配的无人机和一个无人机组成。

我想要类似的东西

Drone Name           Drone Assigned
     Huge                 DJI, Parrot
     Beginner             Skydio,Insitu,EHANG

但我得到了

Drone Name        Drone Assigned
    Beginner             DJI, Parrot, Skydio,Insitu,EHANG

【问题讨论】:

  • 你能代表查询返回的数据样本吗?我还建议将来使用更具可读性的变量,因为您的代码实际上是不可读的。
  • 为什么不向我们展示数组?????
  • @RaedYakoubi 我已经编辑了我的问题。请看一下
  • 因此您只需在表格中打印查询,例如,如果有 3 架 Beginner 无人机,您只需在“无人机名称”中打印一个 Beginner " 单元格,以及其他单元格中分配的所有无人机,对吗?
  • @RaedYakoubi 是的

标签: php mysql drupal-7


【解决方案1】:

好的,这是一种方法,我将在 HTML 代码中使用 alternative foreach 语法,因为我个人认为这种方式更具可读性。

  1. 首先我们将这个数据库查询结果分配给一个 PHP 数组:
$results = [
    ['name' => 'Huge', 'assigned' => 'DJI'],
    ['name' => 'Huge', 'assigned' => 'Parrot'],
    ['name' => 'Beginner', 'assigned' => 'Skydio'],
    ['name' => 'Beginner', 'assigned' => 'Insitu'],
    ['name' => 'Beginner', 'assigned' => 'EHANG'],
];
  1. 现在我们必须为每个无人机名称获取分配的无人机,我们将使用foreach循环生成@987654325形式的数组@:
$drones = [];

foreach ($results as $drone) {
    if (!array_key_exists($drone['name'], $drones)) {
        $drones[$drone['name']] = [];
    }

    $drones[$drone['name']][] = $drone['assigned'];
}
  1. 最后,我们将使用 foreach 循环(替代语法)在 HTML 表格中打印出这些值:
<table border="1">
    <tr>
        <th>Drone Name</th>
        <th>Assigned Drones</th>
        <?php foreach ($drones as $name => $assigned): ?>
            <tr>
                <td><?php echo $name; ?></td>
                <td><?php echo implode(',', $assigned); ?></td>
            </tr>
        <?php endforeach ?>
    </tr>
</table>

【讨论】:

    【解决方案2】:

    您可以更改您的 sql 查询以获得如下格式的结果:

    $result = db_query("SELECT  dg.drone_name , GROUP_CONCAT(td.name) FROM taxonomy_term_data td
                            INNER JOIN drone dg ON dg.tid = td.tid GROUP BY dg.drone_name")->fetchAllKeyed();
    
    
    foreach ($result as $drone_name => $drones_assigned){
    
        $drone_table.='<tr>
        <td>'.$drone_name.'</td>
        <td>'.$drones_assigned.'</td>
        </tr>';
    }
    

    你也可以看看drupal的主题表格渲染,轻松创建html表格https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7.x

    【讨论】:

    • 谢谢@Fky,这就是我想要的。一个sql查询!!
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 2017-11-10
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多