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

我想将美国州名添加到包含美国州缩写的字符串中。


例如,我想转换一个字符串数组,如:


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)。


阿波罗的战车
浏览 89回答 3
3回答

月关宝盒

使用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]] . ')'在州缩写前面附加州名

慕的地10843

对数组格式稍作改动,就可以使用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

有只小跳蛙

您不必拆分单词,只需遍历状态并将短状态替换为新文本。这应该做的工作:$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
打开App,查看更多内容
随时随地看视频慕课网APP