Хорошо, вам не нужно это делать с DOM , но поскольку уже есть множество других ответов, показывающих различные подходы, вот как это сделать с DOM:
function timezoneHelper($selected = NULL)
{
$dom = new DOMDocument;
$dom->formatOutput = TRUE;
$dom->loadXML('<select/>');
$dom->documentElement->setAttribute('name', 'timezone-selector');
$timezones = DateTimeZone::listIdentifiers();
if(!is_numeric($selected)) {
$selected = array_search($selected, $timezones);
}
foreach($timezones as $id => $timezone) {
$option = $dom->createElement('option', $timezone);
$option->setAttribute('value', $id);
if($id == $selected) {
$option->setAttribute('selected', 'selected');
}
$dom->documentElement->appendChild($option);
unset($option);
}
return $dom->saveXML($dom->documentElement);
}
Приведенное выше создаст список идентификаторов часовых поясов (без учета разницы GMT. См. DateTimeZone::listAbbreviations
, если они вам нужны) как <option>
элементов в элементе <select>
.В отличие от вашего кода в вопросе, значение, используемое для атрибута value
, представляет собой числовое смещение в массиве, возвращаемое DateTimeZone::listIdentifiers();
вместо самого идентификатора часового пояса.Вы можете вызвать помощника с помощью идентификатора часового пояса или числового идентификатора, хотя, например,
echo timezoneHelper('551');
// or
echo timezoneHelper('Zulu');
приведет к разметке
<option value="551" selected="selected">Zulu</option>
с атрибутом selected
в возвращенном списке.