选择字段的optgroup-同一表中的组和选项字段我怎样才能做到这一点?

问题描述

| 我有一个搜索表单,用于搜索数据库中的表。该表包括以下列: icao-名称-国家 我有PHP,它将使用以下查询在每行的选择选项中放置这些字段:
 public function airportstuff() {
        $query = \"SELECT icao,name,country
                FROM PHPvms_airports
                ORDER BY icao\";

        return DB::get_results($query);
    }
那么PHP如下:
 <?PHP foreach ($airports as $airport)
 {echo \'<option value=\"\'.$airport->icao.\'\">\'.$airport->icao.\' - \'.$airport->name.\'</option>\';}
                    ?>
这项工作正常,但是我希望能够将“国家/地区”列用作optgroup,因此每个国家/地区都是一个optgroup,该国家/地区的相应机场在正确的optgroup中。 我已经试过了:
<?PHP
foreach ($airports as $airport)
{
echo \'<optgroup label=\"\'.$airport->country.\'\">\';
echo \'<option value=\"\'.$airport->icao.\'\">\'.$airport->icao.\' - \'.$airport->name.\'</option>\';
?>
<?PHP echo \'</optgroup>\';}?>
但这只会为每个机场创建一个optgroup。 在这方面的任何帮助将不胜感激,并在此先感谢。 斯图尔特     

解决方法

        首先,修改查询以按
country
,然后按
icao
进行排序。
public function airportstuff() {
    $query = \"SELECT icao,name,country
            FROM phpvms_airports
            ORDER BY country,icao\";
    return DB::get_results($query);
}
然后试试这个:
$previousCountry = null;
foreach ($airports as $airport) {
    if ($previousCountry != $airport->country) {
        // close the previous optgroup tag only if this isn\'t our first time through the loop
        if ($previousCountry !== null) {
            echo \'</optgroup>\';
        }
        echo \'<optgroup label=\"\'.$airport->country.\'\">\';
    }
    echo \'<option value=\"\'.$airport->icao.\'\">\'.$airport->icao.\' - \'.$airport->name.\'</option>\';
    $previousCountry = $airport->country;
}
// close the final optgroup only if we went through the loop at least once
if ($previousCountry !== null) {
    echo \'</optgroup>\';
}
顺便说一句:为避免代码中存在XSS漏洞,您确实应该将正在构建的HTML的所有动态部分包装在ѭ7或类似功能中。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...