从数组构建下拉列表

时间:2012-03-28 19:02:23

标签: arrays forms codeigniter

作为一个自我承认的新手,我正在寻找一些建议和指导:)

我的数据库中有一个名为 Dams 的表格,它只是世界各地的水坝列表。该表中的一个字段称为国家/地区;指定大坝所在的国家。

我想在我的网站上放置一个搜索表单,允许有人搜索水坝,而对于国家字段,我想将其作为下拉列表显示,列出所有发生的国家/地区该字段,按字母顺序,每个国家/地区名称后面有一个数字,表示该国家/地区在该字段中出现的次数。例如,巴西有15座水坝,所以我希望巴西的下拉菜单上写着“巴西(15个水坝)”。

事情进一步复杂化,因为保存在数据库中的大坝国家只是国家代码(美国,GB等),而不是我想要使用的实际国家名称(美国,英国等)。 / p>

我创建了一系列国家代码/名称,如下所示:

$countries = array(
  "AF" => "Afghanistan",
  "AL" => "Albania",
  "DZ" => "Algeria",
  "AS" => "American Samoa",
  ...
  "ZW" => "Zimbabwe"
);

我已创建下面的查询以从表中检索国家/地区字段内容,计算每个国家/地区的发生次数,并对结果进行分组:

$result = $this->db->query("select country,count(*) as count from default_dams group by country")->result_array();

现在我已经到了不知道如何继续的地步。

我已经尝试过像这样使用foreach循环:

foreach ($query as $row)
{
   $dropdown[$row['country']] = $row['count'];
}
return $dropdown;

它正在给......

<option value="AL">3</option>
<option value="CN">94</option>
<option value="ZW">1</option>

...所以我觉得我到了某个地方,但我不知道如何引入我的$ countries数组以提供如下输出:

<option value="AL">Albania (3 dams)</option>
<option value="CN">China (94 dams)</option>
<option value="ZW">Zimbabwe (1 dam)</option>

我猜我需要一个foreach循环来遍历$ result并形成一个结果数组,从我的模型传递到视图,但是如何构建该数组呢?

顺便说一下,我的视图文件中显示下拉列表的代码片段是:

$first_field = '><option value="all">Any Country</option';
echo form_dropdown('dam-country', $dropdown, 'all', $first_field);

感谢所有的帮助和建议。 :)

贝。

1 个答案:

答案 0 :(得分:1)

呃,我不确定下面的代码是否正确,因为我没有得到你的描述的某些部分,但我会像这样重写foreach:

foreach ($query as $row)
{
    $option = $countries[$row['country']] . '(' . $row['count'];
    // check dams number if one then word "dam" is singular, otherwise plural
    if ($row['count'] == 1) {
       $option .= ' dam)';
    } else {
       $option .= ' dams)';
    }

    $dropdown[$row['country']] = $option;
}
return $dropdown;

我自己不是html代码生成函数的粉丝,我只是在视图中编写myseld(基于一些假设的例子):

// rows - data from the DB sent to View
echo '<select name="countries">';
    echo '<option value="all">Any Country</option>';
    foreach ($rows as $row)
    {
        echo '<option value="' . $row['country'] . '">';
            $option = $countries[$row['country']] . '(' . $row['count'];
            // there must be a dedicated function to deal with singular/plural words in CI
            if ($row['count'] == 1) {
                $option .= ' dam)';
            } else {
                 $option .= ' dams)';
            }
            echo $option;
        echo '</option>';

        $dropdown[$row['country']] = $option;
    }
echo '</select>';