替换PHP中无限值的问题

时间:2018-03-13 12:57:19

标签: php

以下代码是在,-MI中找到,-AL$l个字符,并用MichiganAlabama部分替换它们。因此,如果我们$l = Montgomery,-AL,则下面的代码会返回Montgomery,-Alabama的{​​{1}}值。但是如何更改此代码以使用$l的整个值替换MichiganAlabama

$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

2 个答案:

答案 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;