在PHP中从字符串中删除重复的地址行

时间:2016-07-01 08:45:11

标签: php arrays string duplicates

我正在与提供地址以响应查询的JSON API进行交互。然后我将返回的地址元素放入MYSQL数据库表中。

数据以AddressLine1,AddressLine2,Region,Postcode的形式返回。我遇到的问题是数据的质量非常低,并且很多AddressLine1数据在元素中重复。例如,典型的回报可能是

123 My House 123 My House, My Road

我正试图找出如何在不从“我的道路”部分删除“我的”的情况下删除第二次出现的“123 My House”。

我尝试过各种各样的正则表达式,但我的正则表达式很弱!我也尝试了内爆,但我可以管理的是删除除第一个实例之外的所有重复单词,这对我没有帮助。

我想我需要一些方法来保持第一次出现一个单词并删除所有其他单词,使用逗号作为每个部分的分隔符,所以我最终会得到的是......

123 My House, My Road

有人能指出我正确的方向吗?我想我需要将字符串拆分为逗号中的数组,然后检查数组的每个部分是否有重复项并删除它们然后将数组重新组装回字符串?可能?

我设法做到这一点......

$string = "123 My House 123 My House, My Road";

$split = (explode(',', $string));

foreach($split as $section){
  $cleaned = implode(' ',array_unique(explode(' ', $section)));
  if (!empty($result)){
    $result = $result." ,"; 
  }
  $result = $result.$cleaned;
}

echo $result;

任何人都可以提供更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:-1)

你的问题非常具体,而且我不知道这个问题的答案将如何长期为你的项目服务,但是,我试图为这个特殊情况提供字符串操作解决方案。

您应该尝试使您的代码更加精确和智能,因此它不会首先存储这些双打。

无论如何,您应该用于替换的代码如下:

$str = '123 My House 123 My House, My Road';
$arr = explode(', ', $str);
$arr[0] = implode(' ', array_unique(explode(' ', $arr[0])));

echo $str.'<br>'; // 123 My House 123 My House, My Road
echo implode(', ', $arr); // 123 My House, My Road

分步说明:

  1. 这只会在,
  2. 上分两部分分解地址
  3. 然后它分解了前一个休息/爆炸的第一部分中的空格。
  4. 使用array_unique
  5. 删除重复的值
  6. 再次将第一部分与空格合并
  7. 使用逗号,
  8. 将所有内容粘合在一起

    我希望这会有所帮助。