Создание выпадающего списка из массива - PullRequest
0 голосов
/ 28 марта 2012

Будучи признанным новичком, я ищу несколько советов и указаний:)

В моей базе данных есть таблица с именем Дамбы , которая представляет собой просто список дамб по всему миру. Одно из полей в этой таблице называется Страна ; страна, в которой находится названная плотина.

Я хочу разместить на своем сайте форму поиска, позволяющую кому-либо осуществлять поиск по плотинам, а для поля Страна я хочу представить ее в виде раскрывающегося списка, в котором перечислены все страны, которые находятся в этом регионе. поле, в алфавитном порядке с номером после названия каждой страны и числом раз, когда эта страна встречается в поле. Например, в Бразилии 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>

... так что я чувствую, что куда-то добираюсь, но я не знаю, как ввести свой массив $ стран, чтобы обеспечить вывод вроде:

<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);

Вся помощь и совет принимаются с благодарностью. :)

Tony.

1 Ответ

1 голос
/ 28 марта 2012

Э-э, я не уверен, что следующий код верен, поскольку я не получил некоторые части ваших описаний, но я бы переписал 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>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...