以下代码是在,-MI
中找到,-AL
和$l
个字符,并用Michigan
和Alabama
部分替换它们。因此,如果我们$l = Montgomery,-AL
,则下面的代码会返回Montgomery,-Alabama
的{{1}}值。但是如何更改此代码以使用$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
答案 0 :(得分:0)
首先,我要创建一种包含所有状态的地图:
$states = [];
$states["AL"] = "Alabama";
$states["MI"] = "Michigan";
// add more if needed
然后,您需要以某种方式提取字符串的状态代码。假设它总是最后两个字母,你可以这样做:
$l = "Montgomery,-AL";
$stateCode = substr($l, -2);
如果情况并非如此,您需要弄清楚如何明确地提取州代码。
之后,您只需通过代码访问地图中的完整州名称即可。请参阅此example。
为了仅在状态代码存在时在HTML中注入状态,您可以使用array_key_exists()
:
<?php if (array_key_exists($stateCode, $states)): ?>
<p><?= $states[$stateCode] ?></p>
<?php endif; ?>
答案 1 :(得分:0)
在你的评论中回复我的qn,你说字符串可以包含多个城市。
这将转换单个或多个城市/州字符串的州代码,并假设您只希望州名称出现一次,例如&#34;德克萨斯&#34;不是&#34;德克萨斯州 - 德克萨斯州&#34; 注意由于您之前对qn的编辑表明它是用作我已经使用的URL slug - &#39; - &#39;作为分隔符。
&#34; Alabaster,-AL`将导致&#34; Alabama&#34;。
&#34;阿拉巴斯特,-AL; somecity,-MI,anothercity,-MI&#34;将导致&#34; Alabama-Michigan&#34 ;;
$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;