Приведенный ниже код находит символы ,-MI и ,-AL внутри $l и частично заменяет их на Michigan и Alabama. Итак, если у нас есть $l = Montgomery,-AL, приведенный ниже код возвращает значение Montgomery,-Alabama для $l. Но как изменить этот код, чтобы заменить Michigan и Alabama на полное значение $l.

<?php 
  $short = ["MI", "AL"];
  $long   = ["Michigan", "Alabama"];

  $newl = str_replace($short, $long, $l);
?>
<?php if (preg_match('(Michigan|Alabama)', $newl) === 1): ?>
  <p><?= $newl ?></p>
 endif; ?>

Примеры: ввод: $l = Alabaster,-AL

Вывод: Alabaster,-Alabama

Желаемый результат: Alabama

php
-1
Ray 13 Мар 2018 в 15:57

2 ответа

Лучший ответ

Прежде всего, я бы создал какую-то карту со всеми состояниями:

$states = [];
$states["AL"] = "Alabama";
$states["MI"] = "Michigan";
// add more if needed

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

$l = "Montgomery,-AL";
$stateCode = substr($l, -2);

Если это не так, вам нужно самостоятельно выяснить, как однозначно извлечь код состояния.

После этого вы можете просто получить доступ к полному названию штата на карте по его коду. См. Этот пример.

Чтобы внедрить состояние в ваш HTML, только если код состояния существует, вы можете использовать array_key_exists():

<?php if (array_key_exists($stateCode, $states)): ?>
  <p><?= $states[$stateCode] ?></p>
<?php endif; ?>
0
simon 13 Мар 2018 в 15:32

В ответ на мой вопрос в ваших комментариях вы сказали, что строка может содержать несколько городов.

Это преобразует коды состояния для одной или нескольких строк города / штата и предполагает, что вы хотите, чтобы название штата отображалось только один раз, например. Примечание «Техас», а не «Техас-Техас». Как указывалось в предыдущем редактировании вашего qn, он предназначен для использования в качестве ярлыка URL-адреса, который я использовал в качестве разделителя.

«Алебастр, -AL` приведет к« Алабаме ».

«Алебастр, -AL; somecity, -MI, anothercity, -MI» приведет к «Алабама-Мичиган»;

$code = array("MI" => "Michigan" , "AL" =>  "Alabama"); // etc
$newString = ''; // OR YOUR DEFAULT
$newStrSeparator = '-';
foreach($code as $short => $long) :
  if ( strpos($l, $short) !== false ){
$newString .=  $long .  $newStrSeparator;
  }
endforeach;
$newString = rtrim($newString, $newStrSeparator); // remove any trailing separator
if ($newString == '') { // if state not in string set it to whatever value you want }

echo $newString;
0
scytale 13 Мар 2018 в 15:01