У меня есть эти имена переменных тома. Перед тем, как представить их пользователям, их необходимо «ретушить».
$unit[] = 'cm3';
$unit[] = 'barrel_petrolium';
$unit[] = 'register_tons';
$unit[] = 'ocean_tons';
$unit[] = 'gal_us';
$unit[] = 'gal_uk';
У меня нет проблем по первым 2 правилам. Как я могу также применить 3-е правило?
# replacements
$search = array('3', '_');
$replace = array('³', ' ');
# units
$temp = str_replace($search, $replace, $unit); //1st and 2nd rules
$formatted[] = $temp;
print_r($formatted);
Результат будет:
cm³
barrel petrolium
register tons
ocean tons
gal us
gal uk
Так должно быть:
cm³
barrel petrolium
register tons
ocean tons
gal (US)
gal (UK)
Есть идеи? Спасибо!
Вы можете использовать preg_replace_callback:
$unit[] = 'cm3';
$unit[] = 'barrel_petrolium';
$unit[] = 'register_tons';
$unit[] = 'ocean_tons';
$unit[] = 'gal_us';
$unit[] = 'gal_uk';
$result = array_map(function ($item) {
$item = preg_replace_callback('~_\K[a-z]{2}\z~', function ($m) {
return '(' . strtoupper($m[0]) . ')';
}, $item);
return strtr($item, array('3' => '³', '_' => ' '));
}, $unit);
print_r($result);
детали шаблона:
~ # pattern delimiter
_ # literal _
\K # keep out all on the left (the underscore here)
[a-z]{2} # two lowercase letters
\z # anchor for the end of the string
~ # delimiter
С \K
функция, только две буквы в конце будут заменены. Замена подчеркивания — это работа strtr()
(функция перевода символов и больше)
Других решений пока нет …