У меня есть строка, которую я извлекаю из моей БД, в которой есть информация о городе и почтовом индексе. Я хочу извлечь из него почтовые индексы (всегда 5 цифр) и построить из него оператор select (используя PHP) следующим образом:
$townZip = 'Boston(02108, 02112, 02116), Chelsea (02150), Revere (02151)';
<select>
<option value="">Please Select</option>
<option value="02108">02108</option>
<option value="02112">02112</option>
<option value="02116">02116</option>
<option value="02150">02150</option>
<option value="02151">02151</option>
</select>
Обратите внимание, что строка может иметь различное количество городов, почтовых индексов, поэтому решение должно быть достаточно гибким, чтобы учесть это.
Попробуй это:
<?php
$townZip = 'Boston(02108, 02112, 02116), Chelsea (02150), Revere (02151)';
$zips = explode(',',preg_replace('#[^,0-9]#', '', $townZip));
echo '<select>';
echo '<option value="">Please Select</option>';
foreach($zips as $zip){
echo '<option value="'. $zip.'">'. $zip.'</option>';
}
echo '</select>';
?>
Приведенный выше код удаляет все, кроме цифр и запятой, а затем разбивает его запятой, которая дает нужные вам почтовые индексы. Затем переберите массив почтовых индексов и создайте select.
[ОБНОВЛЕНО]
Это будет выглядеть немного беспорядочно, но вы можете получить названия городов с помощью почтовых индексов:
<?php
$townZip = 'Boston(02108, 02112, 02116), Chelsea (02150), Revere (02151)';
$zips = explode(',',preg_replace('#[^A-Za-z,0-9(]#', '', $townZip));
echo '<select>';
echo '<option value="">Please Select</option>';
$prev = '';
foreach($zips as $zip){
$temp = explode('(',$zip);
if(isset($temp[1])){
$prev = $temp[0];
$temp[0] = $temp[1];
}
echo '<option value="'. $temp[0].'">'. $prev. '-' . $temp[0].'</option>';
}
echo '</select>';
?>
Других решений пока нет …