Объединение адресных полей в одно поле

0

Привет В настоящее время я использую сторонний API, который получает адресные данные на основе почтового индекса и поиска адресов, он возвращает массив через xml, который работает нормально. Из доступных 30+ полей, которые возвращаются, есть 8, которые я хотел бы вставить в поле типа поля memo.

$item["Line1"] . "<br/>";
$item["Line2"] . "<br/>";
$item["Line3"] . "<br/>";
$item["Line4"] . "<br/>";
$item["Line5"] . "<br/>";
$item["PostTown"] . "<br/>";
$item["County"] . "<br/>";
$item["Postcode"] . "<br/>";

Мой вопрос в том, как я могу поместить их в поле и удалить пустые строки, чтобы адрес проходил соприкасающийся?

Например, используя вышеизложенное, если строка 3, строка 4 и строка 5 являются нулевыми, результат будет

Линия 1
Почтовый город
округ
салонов Почтовый

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

Теги:

6 ответов

0

Если вы не хотите использовать оператор "if", вы можете использовать тройные операторы:

(strlen(trim($item["Line1"])) > 0 ? $item["Line1"] . "<br/>" : "");
(strlen(trim($item["Line2"])) > 0 ? $item["Line2"] . "<br/>" : "");
(strlen(trim($item["Line3"])) > 0 ? $item["Line3"] . "<br/>" : "");
(strlen(trim($item["Line4"])) > 0 ? $item["Line4"] . "<br/>" : "");
(strlen(trim($item["Line5"])) > 0 ? $item["Line5"] . "<br/>" : "");
(strlen(trim($item["PostTown"])) > 0 ? $item["PostTown"] . "<br/>" : "");
(strlen(trim($item["County"])) > 0 ? $item["County"] . "<br/>" : "");
(strlen(trim($item["Postcode"])) > 0 ? $item["Postcode"] . "<br/>" : "");
0

Вы можете проверить с условием:

if(trim($item["Line1"])):echo $item["Line1"] . "<br/>";endif;
if(trim($item["Line2"])):echo $item["Line2"] . "<br/>";endif;

Другой путь:

foreach($item as $cur){
  if(trim($cur)): echo "$cur <br>"; endif;
}
0

Можно ли сделать $ item ['line'] массив и цикл через этот массив?

$ Пункт [ "Line"] [0]

$ Пункт [ "Line"] [1]

...

foreach ($item['line'] as $line) {

if (!empty($line)) {$line . "<br/>";}

}
0

Вы можете поместить ключи в массив, например:

$arrayKeys = array("Line1","Line2","Line3","Line4","Line5","PostTown","County","Postcode");

то вы можете просто перебрать его, добавив вывод в другую переменную и повторите его так:

$output = "";

foreach($arraysKeys as $key){
    if(array_key_exists($key, $item){
        $output .= $item[$key] . "<br/>";
    }
}

echo $output;
  • 0
    У вас есть ошибка: «$ key_exists» должно быть «array_key_exists».
  • 0
    Извините, отредактировано, и key_exists работает отлично
Показать ещё 3 комментария
0

Что-то вроде этого (непроверено):

for($i = 1; $i <= 5; $i++) {
    if(!is_null($item['Line'.$i]) && strlen($item['Line'.$i])) {
        // do something with it
        echo $item['Line'.$i] . '<br/>';
    }
}

Если вы хотите его для каждого поля в $item:

foreach($item as $value) {
    if(!is_null($value) && strlen($value)) {
        // do something with it
        echo $value . '<br/>';
    }
}
  • 0
    Это не работает для 3 полей: "PostTown", "County", "Postcode"
  • 0
    @ Наруто теперь так и есть ... но мы не знаем, хочет ли OP выполнить это для каждого элемента в массиве ...
Показать ещё 2 комментария
0

Я бы пошел с этим:

array_walk($item, function($val) {
   if (!is_null($val)) echo $val. "<br/>";
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню