2016-07-01 24 views
-1

我正在與一個JSON API進行交互,該JSON API提供了一個響應查詢的地址。然後,我將返回的地址元素放入MYSQL數據庫表中。從PHP中刪除重複的地址行PHP

數據返回爲AddressLine1,AddressLine2,Region,Postcode。我遇到的問題是數據的質量很低,很多AddressLine1數據在元素中被複制。例如,一個典型的回報可能是

123 My House 123 My House, My Road 

我試圖找出我怎麼能去掉「123我的家」的第二次出現不刪除「我的」,從「我的路」的一部分。

我試過各種正則表達式,但我的正則表達式很弱!我也嘗試過內爆,但我所能做的就是刪除除第一個實例外的所有重複單詞,這對我沒有任何幫助。

我想我需要保持一個詞的首次出現,並使用逗號作爲各部分分隔所以我將最終得到的是去除所有其他的一些途徑...

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

建議:逐個字符迭代字符串,測試'substr(0,i)'是否等於'substr(i,i)',然後刪除(換句話說,測試字符串的一部分是否相等到零件跟隨它,慢慢地延長零件的長度)。我確信有很多方法可以用正則表達式。 - 總的來說,雖然這是一個相當複雜的問題,但幾乎沒有一種適用於清理不良數據的解決方案。 – deceze

+0

你可以分享你使用的JSON API嗎? – Gordon

回答

-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. 連同空間一起再次用逗號,

我希望這可以幫助刪除重複值與array_unique

  • 膠第一部分
  • 膠一切恢復。

  • +0

    rip downvotes在那裏 – Ponilz

    +0

    (沒有必要對一個downvote發表評論 - 這不是一場洪水,它對未來的讀者不感興趣,如果你願意的話,將它放在評論中,但總的來說,我認爲人們不會迴應要求投票反饋)。 – halfer