作为一个自我承认的新手,我正在寻找一些建议和指导:)
我的数据库中有一个名为 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);
感谢所有的帮助和建议。 :)
贝。
答案 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>';