我正在修改我之前提出的根本不明确的问题。 我对 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>";
}
回答我自己) 我必须将获取的行数组划分为每个基因的单独数组:
$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";
}