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

时间:2014-11-04 16:09:46

标签: php string text-extraction

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

请注意,字符串可以包含不同数量的城镇,拉链码,因此解决方案必须足够灵活,以适应这种情况。

1 个答案:

答案 0 :(得分:2)

试试这个:

<?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>';
?>

上面的代码会删除除数字和逗号之外的所有内容,然后使用逗号将其展开,这将提供您需要的zipcodes。然后循环遍历zipcodes数组并创建select。

<强> [增订]

它看起来有点乱,但您可以使用以下代码获得带有zipcodes的城镇名称:

<?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>';
?>