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

时间:2018-11-06 21:58:31

标签: php if-statement foreach abbreviation

我正在尝试在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;
  }
 }
}

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说

 $array = [
    '/\bpwr\b/i' => 'power',
    '/\bbrk\b/i' => 'brake'
 ];


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

然后,您只需添加更多单词及其替换。 Preg Replace更好,因为您可以使用\b或单词边界来防止类似pwr中的pwrstr或您所拥有的东西。 \b匹配\W或不匹配\w,或者用英语(lol)匹配a-z A-Z 0-9_以外的任何内容。

字符串替换可以匹配单词的一部分,而您并不想抓住这个机会。

preg_replace的另一个优点是\b(pwr|powr)\b,您可以在其中进行匹配并用相同的东西替换它们。 ()是一个捕获组,在这里我仅使用它来对单词进行分组,因此不必重复\b|是OR。

最后一件事情是,您可以使用i标志(在结束定界符/foo/i之后)使其不区分大小写。使用str_ireplace()可以做到相同,但不能像使用preg_replace()那样在每次比赛中进行区分。

两者都可以处理数组,因此您不必自己遍历使用str_repace()preg_replace()进行多次替换。

如果您需要帮助,或者只是为了测试正则表达式,此站点是https://regex101.com/(IMO)周围最好的测试Regex站点之一。就是说,有一些细微的差别(也许您不会注意到),但是另一个不错的站点是这个http://preg_replace.onlinephpfunctions.com/。如果您查看其中的导航,则其中有很多PHP沙盒类的东西。

干杯!