为了账号安全,请及时绑定邮箱和手机立即绑定

如何在数组源的缩写后有效地添加字符串?

如何在数组源的缩写后有效地添加字符串?

PHP
阿波罗的战车 2022-07-16 18:00:02
我想将美国州名添加到包含美国州缩写的字符串中。例如,我想转换一个字符串数组,如:Lorem ipsum CA dolor NY sit foo bar至:Lorem ipsum CA (California) dolor NY (New York) sit any foo bar假设我的替换数组如下所示:$states = array(    "AR" => "Arkansas",    "CA" => "California",    "NY" => "New York");一种方法是进行 array_key 搜索:$input = "Lorem ipsum CA dolor NY sit any foo bar";$words = explode(' ', $input);foreach ($words as $key => $word) {    if (array_key_exists($word, $states)) {        $words[$k] = $word . " (" . $states[$word] . ")";    }}$output = implode(" ", $words);// Output: Lorem ipsum CA (California) dolor NY (New York) sit any foo bar有没有更有效的方法使用原生 PHP 函数或正则表达式?解决方案不应匹配部分匹配项(例如anyshould not matchNY和barshould not match AR)。
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用preg_replace_callback函数,您可以在没有任何循环的情况下一步完成:


$repl = preg_replace_callback('/\b(' . implode("|", array_keys($states)) . ')\b/',

     function ($m) use($states) { return $m[1] . ' (' . $states[$m[1]] . ')'; }, $input);


//=> Lorem ipsum CA (California) dolor NY (New York) sit any foo bar

代码说明:

  • '/\b(' . implode("|", array_keys($states)) . ')\b/':这里我们正在使用从 array 获取的数组键构建一个正则表达式$states。会变成:/\b(AR|CA|NY)\b/这里。请注意,此正则表达式中的第 1 组中正在捕获状态缩写。

  • $m[1] . ' (' . $states[$m[1]] . ')'在州缩写前面附加州名


查看完整回答
反对 回复 2022-07-16
?
慕的地10843

TA贡献1785条经验 获得超8个赞

对数组格式稍作改动,就可以使用strtr()数组...


$states = array(

    "AR" => "AR (Arkansas)",

    "CA" => "CA (California)",

    "NY" => "NY (New York)"

);


$text = "Lorem ipsum CA dolor NY sit foo bar";


echo strtr( $text, $states);

给...


Lorem ipsum CA (California) dolor NT (New York) sit foo bar


查看完整回答
反对 回复 2022-07-16
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您不必拆分单词,只需遍历状态并将短状态替换为新文本。


这应该做的工作:


$states = array(

    "AR" => "Arkansas",

    "CA" => "California",

    "NY" => "New York"

);


$input = "Lorem ipsum CA dolor NY sit any foo bar";

foreach($states as $shortState=>$longState){

   $input = str_replace($shortState, $shortState." (".$longState.")", $input); 

}

echo $input;

// output: Lorem ipsum CA (California) dolor NY (New York) sit any foo bar


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号