Я пытаюсь манипулировать несколькими строками в 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 = [
'/\bpwr\b/i' => 'power',
'/\bbrk\b/i' => 'brake'
];
$str = preg_replace(array_keys($array), $array, $str);
Тогда вы просто добавляете больше слов и заменяете их. Preg Replace лучше, потому что вы можете использовать \b
или граница слова, которая мешает подобным вещам pwr
в pwrstr
или что у тебя. \b
Матчи \W
или нет \w
или по-английски (смеется) ничего не a-z
A-Z
0-9
а также _
,
Замена строки может соответствовать части слова, которой вы не хотите рисковать.
Еще одно преимущество preg_replace это \b(pwr|powr)\b
где вы могли бы сопоставить оба из них и заменить их одним и тем же. ()
группа захвата, здесь я использую ее просто для группировки слов, чтобы \b
не должен повторяться И |
ИЛИ
Последнее, что вы можете использовать i
флаг (после конечного разделителя /foo/i
) чтобы сделать его нечувствительным к регистру. С str_ireplace()
, вы можете сделать то же самое, но вы не можете дифференцировать для каждого матча, как вы можете с preg_replace()
,
Оба работают с массивами, так что вам не придется зацикливаться на множественной замене самостоятельно str_repace()
или же preg_replace()
,
Если вам нужна помощь или просто для проверки регулярных выражений, этот сайт является одним из лучших тестовых сайтов Regex https://regex101.com/ (ИМО). Тем не менее, есть небольшая разница (вероятно, вы ничего не заметите), но это еще один хороший сайт http://preg_replace.onlinephpfunctions.com/ . Если вы посмотрите на навигацию, в ней есть куча вещей с песочницей PHP.
Ура!
Других решений пока нет …