PHP Implode адрес теряет последнюю часть адреса - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть следующий код, который берет местоположение и извлекает из него город и штат / страну:

$address_input = "555 Test Drive, Johannesburg, South Africa";

if (strpos($address_input, ',') !== false) {
    $arr = explode(", ", $address_input);
    if(count($arr) >1){
        $arr[count($arr)-1] = explode(" ", $arr[count($arr)-1])[0];
        $address = implode(", ", array_slice($arr, -2));
    }
}

Адрес выводится как:

"Йоханнесбург, Юг"вместо "Йоханнесбург, Южная Африка" ..

Как я могу изменить приведенный выше код, чтобы он возвращал полную последнюю часть адреса, как в примере выше?Я вижу, что implode ловит все фрагменты после запятой, но как я могу получить последний фрагмент адреса, содержащий полное название штата или страны?Я не знаю, куда идти отсюда.

Спасибо!

Ответы [ 7 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать substr_count, чтобы увидеть, есть ли в строке более одной запятой.
Если есть подстрока, строка из первых запятых +2 символа (запятая и пробел) с помощью strpos.
Это означает, что мы выполняем только манипуляции со строками и не выполняем преобразований в массив и обратно в строку.

$address_input = "555 Test Drive, Johannesburg, South Africa";
if(substr_count($address_input, ",") >1){
    $address = substr($address_input, strpos($address_input, ",")+2);
}

echo $address;
// Johannesburg, South Africa

Не знаете, что делать, если строка не в этом шаблоне, вам нужно включить это в вопрос, если вам нужна помощь с ней.

https://3v4l.org/gGWSR

0 голосов
/ 21 февраля 2019

Вам нужно взять только 2 элемента из адреса после разнесения, вы можете удалить первый и использовать implode остальные элементы массива

$address = "555 Test Drive, Johannesburg, South Africa";
$addressToArray = explode(',',$address);
if(is_array($addressToArray)){
  array_shift($addressToArray);
  echo implode(',',$addressToArray);
}

Результат

Johannesburg, South Africa
0 голосов
/ 21 февраля 2019

Попробуйте, если шаблон совпадает с упомянутым, i.e Основной адрес, Город, Страна.

$address_input = "555 Test Drive, Johannesburg, South Africa";
print_r(implode(", ", array_slice(explode(", ", $address_input), -2)));

//Output:
//Johannesburg, South Africa 

Рабочий код здесь: http://codepad.org/rgerYEeD

0 голосов
/ 21 февраля 2019

Проблема с вашим кодом - explode, который есть у вас на последнем предмете.В основном вы берете South Africa, разделяете его пробелом, затем берете первое слово South и заменяете последнюю запись исходного массива.

$address_input = "555 Test Drive, Johannesburg, South Africa";

if (strpos($address_input, ',') !== false) {
    $arr = explode(", ", $address_input);
    if(count($arr) >1){
        //$arr[count($arr)-1] = explode(" ", $arr[count($arr)-1])[0];  // by commenting this line out, I got he results you were expecting
        $address = implode(", ", array_slice($arr, -2));
    }
}
0 голосов
/ 21 февраля 2019

При условии, что входные адреса всегда будут следовать одному и тому же шаблону и что только первая часть адреса, которая должна быть удалена, есть несколько различных подходов, которые можно использовать - это другой вариант:

    $address_input = "555 Test Drive, Johannesburg, South Africa";
    $arr=explode( ",", $address_input );
    if( !empty( $arr ) ){
        array_shift( $arr );
        $address_output=implode( ",", $arr );
        echo $address_output;
    }

выходы:

Johannesburg, South Africa
0 голосов
/ 21 февраля 2019

Просто возьмите 2 и 3 элемента из взорванного массива

$address_input = "555 Test Drive, Johannesburg, South Africa";

if (strpos($address_input, ',') !== false) {
    $arr = explode(", ", $address_input);
    if (count($arr) == 3)
        $address = $arr[1].', '.$arr[2];
}
0 голосов
/ 21 февраля 2019

Как то так?

if (strpos($address_input, ',') !== false) {
    $arr = explode(', ', $address_input);
    if (count($arr) > 1) {
        $address = implode(', ', array_slice($arr, -2));
    }
}
...