Часто приходится формировать списки (select) в форме, довольно утомительная процедура, особенно если тащишь инфу из базы или ещё от куда нибудь и надо еще и выделить в списке (select) один из элементов (options). Хочу поделится одним из моих методов созданный именно для этого. Думаю пригодится. Комментарии приветствуются!
/**
* Класс для работы с формами.
*/
class Form {
/**
* Метод для создания списка (options) для выпадающего меню (select).
* Методу можно передавать два аргумента: первый - значения для создания "options",
* второй - значение, которое надо выделить в списке.
*
* Второй аргумент можно опускать - в этом случаем будет выделен 1-й элемент.
* Первый аргумент может быть в виде строки или в виде массива.
*
* Если аргумент представлен в виде массива, то возможны два варианта.
* Массив может быть как одномерным так и многомерным.
* Если массив многомерный, то каждый элемент массива должен состоять из 2-х элементов:
* первый элемент будет преобразован в текст списка, второй в значения и т.д.
* Если массив одномерный, то каждый элемент массива будет преобразован в элемент списка,
* при этом текст и значения элемента списка будут идентичные.
*
* Если аргумент представлен в виде строки, то возможны также два варианта.
* Строка может быть представленна в виде
* "текст списка => значение списка[, текст списка -> значение списка ...]"
* или в виде "текст списка[, текст списка ...]". Во втором варианте значение списка
* будет одиноково с текстом списка.
*/
function DoOptions() {
$args = func_get_args();
$arg1 = $args[0];
// Если значения для преобразования представлены в виде строки,
// то преобруем её в массив.
if (is_string($arg1)) {
// Определяем, как представлена строка для преобразования, и в зависимости от этого
// формируем одномерный или многомерный массив.
$arg1 = str_replace(' ', '', $arg1);
$arg1 = explode(',', $arg1);
if (strstr($arg1[0], '=>'))
for($i = 0; $i < count($arg1); $i++)
$arg1[$i] = explode('=>', $arg1[$i]);
}
// Определяем, существует ли значение для списка (одномерный или многомерный массив),
// если нет, то присваиваем значению списка текст списка.
$options = '';
if (is_array($arg1[0])) {
// Формируем список
$options = '';
foreach ($arg1 as $tmp) {
$text = $tmp[0];
$value = $tmp[1];
// Выделяем тот элемент списка который передан в качестве 2-го параметра.
$selected = (isset($args[1]) && $args[1] == $value)?
'selected':
'';
$options .= "<option value=\"$value\" $selected>$text</option>\n";
}
} else {
foreach ($arg1 as $text) {
// Выделяем тот элемент списка который передан в качестве 2-го параметра.
$selected = (isset($args[1]) && $args[1] == $text)?
'selected':
'';
$options .= "<option value=\"$text\" $selected>$text</option>\n";
}
}
return $options;
}
}