将多个字符串中的缩写转换为完整单词-PHP



我正试图在PHP中操作多个字符串。我使用foreach循环和if statements提取阵列数据。一些数组数据以缩写形式存储。我想把这些缩写转换成完整的单词。一个例子是缩写pwr,它代表power。缩写可以在各种不同的上下文中找到。下面我将附上我的PHP代码及其各自的输出,在那里你可以看到pwr缩写的各种字符串。

PHP:

<?php
foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".strtolower($tsname)."<br>";
echo $finaltsdata;
}
}
}
?>

输出:

Suspension Type - Front (105) : 4-link,
Suspension Type - Rear (106) : trapezoidal link,
Suspension Type - Front (Cont.) (107) : pwr-adjustable sport
Suspension Type - Rear (Cont.) (108) : pwr-adjustable sport
Front Tire Size (140) : p235/40yr18
Rear Tire Size (141) : p235/40yr18
Spare Tire Size (142) : p235/40yr18
Front Wheel Size (156) : 18 x 8.0
Rear Wheel Size (157) : 18 x 8.0
Spare Wheel Size (158) : 18 x 8.0
Front Wheel Material (165) : alloy
Rear Wheel Material (166) : alloy
Spare Wheel Material (167) : alloy
Steering Type (176) : pwr rack & pinion
Steering Ratio (:1), Overall (178) : 16.3
Turning Diameter - Curb to Curb (184) : 37.7
Brake Type (186) : pwr

注意缩写pwr是如何在各种不同的上下文中找到的:单独、在一组单词之前、在破折号之前等。我如何在foreach代码中创建一个语句,将所有提到的pwr转换为power

谢谢!


$array = [
'/b(pwr|Pwr|powr)b/i' => 'power',
];
$tsname = preg_replace(array_keys($array), $array);

foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){   
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".$tsname."<br>";
echo $finaltsdata;
}
}
}

正如我在评论中所说

$array = [
'/bpwrb/i' => 'power',
'/bbrkb/i' => 'brake'
];

$str = preg_replace(array_keys($array), $array, $str);

然后你只需要添加更多的单词并替换它们。Preg Replace更好,因为你可以使用b或单词边界,它可以防止在pwrstr中匹配pwr或其他东西。b匹配W或不匹配w,或者在英语(lol(中匹配任何不匹配a-zA-Z0-9_的内容。

字符串替换可以匹配单词的一部分,但你并不想冒险

preg_replace的另一个优点是这个b(pwr|powr)b,您可以将两者匹配,并用相同的东西替换它们。()是一个捕获组,在这里我只使用它来对单词进行分组,这样b就不必重复了。并且CCD_ 23是OR。

最后一件事是可以使用i标志(在结束分隔符/foo/i之后(使其不区分大小写。使用str_ireplace(),您可以做同样的事情,但您不能像使用preg_replace()那样在每场比赛的基础上进行区分。

两者都使用数组,因此您不必自己使用str_repace()preg_replace()循环多次替换。

如果你需要帮助,或者只是测试正则表达式,这个网站是最好的测试Regex网站之一https://regex101.com/(IMO(。也就是说,有一些细微的差异(可能你不会注意到(,但另一个好的网站是这个http://preg_replace.onlinephpfunctions.com/。如果你看一下它的导航,它有很多PHP沙盒的东西。

干杯!

最新更新