2016-07-01 2 views
-1

Я взаимодействую с API JSON, который предоставляет адрес в ответ на запрос. Затем я помещаю возвращаемые элементы адреса в таблицу базы данных MYSQL.Удалить повторяющиеся строки адреса из строки в PHP

Данные возвращаются как AddressLine1, AddressLine2, Region, Postcode. Проблема заключается в том, что качество данных довольно низкое, и многие данные AddressLine1 дублируются внутри элемента. Например, типичный возврат может быть

123 My House 123 My House, My Road 

Я пытаюсь выяснить, как я могу удалить второе вхождение «123 My House» без снятия «Моей» из «Моей Дороги» части.

Я пробовал все виды регулярных выражений, но мое регулярное выражение fu слабое! Я также попытался сделать вывод, но все, что я могу сделать, это удалить все повторяющиеся слова, кроме первого экземпляра, который мне не помогает.

Я думаю, мне нужно каким-то образом держать первое вхождение слова и удаление всех остальных, используя запятую в качестве разделителя для каждой части так, что я в конечном итоге с является ...

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

Можете ли вы поделиться API JSON, который вы используете? – 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
  4. Клей первую часть вместе с пробелами снова
  5. Клей все вместе с запятой ,

Я надеюсь, что это помогает.

+0

rip downvotes был там – Ponilz

+0

(Нет необходимости комментировать один нисходящий поток - это не потоп, и это не представляет интереса для будущих читателей. Поместите его в комментарии, если вам нужно, но в целом я не думаю, что люди отвечают к запросам на голосование). – halfer

Смежные вопросы