将 PHP 中的结果表划分为子表

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

我正在修改我之前提出的根本不明确的问题。 我对 PHP 编程非常陌生。 我在 postgres 有一张表:

| gene_name | description|
| gene1     | kuku       | 
| gene1     | blabla     |
| gene2     | tralala    |

我有一个搜索表单,其中可以选择使用基因名称或描述列进行搜索,我正在获取结果并使用以下代码以 html 形式呈现:


    $search_input = test_input($_GET["search_keywords"]);
     $searched_by = test_input($_GET["search_by"]);
     $query = "SELECT * FROM gene WHERE lower($searched_by) SIMILAR TO       '%".pg_escape_string(search_input)."%'

    $res = pg_query($query) or die('Query failed: ' . pg_last_error());
    
    if ($res) {
    // Printing results in HTML
    echo "<table id=\"tblAnnotations\" class=\"table annot_table\">\n<thead><tr><th>Gene</th>    <th>Term</th></tr>";
  
    while ($line = pg_fetch_array($res, null, PGSQL_ASSOC)) {
      $found_gene = $line["gene_name"];
      $found_desc = $line["description"];
            
    echo "<tr><td>$found_gene</a></td><td><td>$found_desc</td></tr>\n";
    }
    echo "</tbody>\n</table>\n";
    }
    else {
    echo "<p>No results found.</p>\n";
    }
   
    pg_free_result($res);

我想为每个基因建立单独的子表,并带有基因名称的标题,但我只是不知道如何正确地做到这一点。

我想要的输出是:

| gene_name | description|
gene1 
| gene1     | kuku       | 
| gene1     | blabla     |
gene2
| gene2     | tralala    |

我尝试添加一个 uniquegene 变量并添加一个循环,这将在每个子表上方放置一个标题,但它根本不起作用,我得到一个空结果,所以我显然做了一些非常基本的错误。将非常感谢您的帮助!

$uniqueGenes[] = array_unique($line["gene_name"]);
     foreach ($uniqueGenes as $uniqueGene) {
     echo "<h4>$uniqueGene</h4>";
     }   
php html postgresql array-unique
1个回答
0
投票

回答我自己) 我必须将获取的行数组划分为每个基因的单独数组:

$geneAnnotations = array();
// Add the annotation to the specific gene in the array
$geneAnnotations[$found_gene][] = array(
    'desc' => $found_desc,
);

然后循环遍历每个数组并将表格打印为 html。

 // Printing results in HTML
foreach ($geneAnnotations as $geneName => $annotations) {
    echo "<button class=\"collapsible\" data-table-id=\"tblAnnotations_$geneName\" onclick=\"toggleTable('tblAnnotations_$geneName')\">$geneName</button>";
    echo "<div class=\"content\">";
    echo "<table id=\"tblAnnotations_$geneName\" class=\"table annot_table\">\n<thead><tr><th>Annotation</th></tr></thead>\n<tbody>\n";

    foreach ($annotations as $annotation) {
        echo "<tr><td>{$annotation['desc']}</td></tr>\n";
    }

    echo "</tbody>\n</table>\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.