从字符串中提取zipcodes,并在php中构建一个select语句


Extract zipcodes from string and build a select statement in php

我从数据库中获取了一个字符串,其中包含城镇和邮政编码信息。我想从中提取邮政编码(总是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>';
?>