【问题标题】:Building a dropdown list from an array从数组构建下拉列表
【发布时间】:2012-03-28 19:02:23
【问题描述】:

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

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

我想在我的网站上放置一个搜索表单,允许某人搜索大坝,对于 Country 字段,我想将其显示为下拉列表,列出所有出现在该字段按字母顺序在每个国家/地区的名称后加上一个数字,以及该国家在该字段中出现的次数。例如,巴西有 15 座大坝,因此我希望巴西的下拉条目为“巴西(15 座大坝)”。

事情变得更加复杂,因为数据库中保存的大坝国家只是国家代码(美国、英国等),而不是我想要使用的实际国家名称(美国、英国等)。

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

$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 并形成一个结果数组以从我的模型传递到视图,但是如何构建该数组?

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

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

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

托尼。

【问题讨论】:

  • 这个问题几乎每天都会被问到,发帖前请浏览档案寻找类似问题

标签: arrays forms codeigniter


【解决方案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>';

【讨论】:

  • 效果很好!我什至没有考虑何时使用“dam”或“dams”,所以那一点额外的代码非常有用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2015-12-15
  • 2017-02-11
相关资源
最近更新 更多