Как заменить запятые на точки и наоборот

У меня есть строка с этим значением:

$myValue = "1.099,90";

И я хочу заменить запятые на точки и наоборот. Именно так:

$myNewValue = "1,099.90";

Я знаю, что должны быть другие лучшие способы сделать это .. Но все, что я могу получить, это:

$myNewValue = str_replace(",","|",$myValue);
$myNewValue = str_replace(".",",",$myValue);
$myNewValue = str_replace("|",".",$myValue);

Но этот путь выглядит странно и плохо пахнет!
Есть отличная идея сделать это?

Спасибо!

0

Решение

strtr() не заменяет замены, поэтому вы можете избежать временных трубопроводов.

Код: (демонстрация)

$myValue = "1.099,90";
echo strtr($myValue, ["." => ",", "," => "."]);

Выход:

1,099.90

Ресурс: http://php.net/manual/en/function.strtr.php

2

Другие решения

Это выполнит работу, но вы определенно можете использовать preg_replace, чтобы придумать другой метод.

<?php
$myValue = '1.099,90';
$parts = explode(".", $myValue); // break up the (.)periods
$num = count($parts); // number of parts
for($loop = 0; $loop < $num; $loop++){ // cycle through each part
if(strpos($parts[$loop], ",") !== false){ // if this includes (,)comma - swap it
$parts[$loop] = str_replace(",", ".", $parts[$loop]);
}
if($loop !== ($num - 1)){ // if this is not the last loop iteration..add comma after (replace period)
$myNewValue .= $parts[$loop] . ",";
} else {
$myNewValue .= $parts[$loop]; // last loop iteration, no comma at end
}
}

echo $myNewValue;

Вы также можете использовать str_replace с дополнительной | символ (или что-нибудь) …

<?php
$myValue = '1.099,90';
$replace = array(",", ".", "|");
$with = array("|", ",", ".");
$myNewValue = str_replace($replace, $with, $myValue);
echo $myNewValue;
?>
1