Приведенный ниже код находит символы ,-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
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; ?>
В ответ на мой вопрос в ваших комментариях вы сказали, что строка может содержать несколько городов.
Это преобразует коды состояния для одной или нескольких строк города / штата и предполагает, что вы хотите, чтобы название штата отображалось только один раз, например. Примечание «Техас», а не «Техас-Техас». Как указывалось в предыдущем редактировании вашего 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;
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.