Например, бывает при обработке прайс-листа у разных товаров цены указана в разном виде - 100р., 100.00 руб. и т.д. Данная функция поможет привести такие данные к одному типу, что исключит ошибки при добавлении в БД.
function clean_price($value, $default = 0, $decimal = false)
{
$value = mb_ereg_replace('[^0-9.,]', '', $value);
$value = mb_ereg_replace('[,]+', ',', $value);
$value = mb_ereg_replace('[.]+', '.', $value);
$pos_1 = mb_strpos($value, '.');
$pos_2 = mb_strpos($value, ',');
if ($decimal) {
if ($pos_1 && $pos_2) {
// 1,000,000.00
$value = mb_substr($value . '00', 0, $pos_1 + 3);
$value = str_replace(',', '', $value);
} elseif ($pos_1) {
// 1000000.00
$value = mb_substr($value . '00', 0, $pos_1 + 3);
} elseif ($pos_2) {
if ((mb_strlen($value) - $pos_2) == 3) {
// 10,00
$value = str_replace(',', '.', $value);
} else {
// 100,000,000
$value = str_replace(',', '', $value) . '.00';
}
} elseif (mb_strlen($value) == 0) {
return $default;
} else {
$value = $value . '.00';
}
return ($value == '0.00') ? 0 : $value;
} else {
if ($pos_1 && $pos_2) {
// 1,000,000.00
$value = mb_substr($value, 0, $pos_1);
$value = str_replace(',', '', $value);
} elseif ($pos_1) {
// 1000000.00
$value = mb_substr($value, 0, $pos_1);
} elseif ($pos_2) {
// 100,000,000
$value = str_replace(',', '', $value);
}
return (mb_strlen($value) == 0) ? $default : intval($value);
}
}
echo clean_price('1000.50 руб.'); // 1000.50
echo clean_price('5 000 рублей'); // 5000.00
echo clean_price('305 р.'); // 305.00
echo clean_price('$100,000.50'); // 100000.50
function format_price($value, $unit = 'руб.')
{
if ($value > 0) {
$value = number_format($value, 2, ',', ' ');
$value = str_replace(',00', '', $value);
if (!empty($unit)) {
$value .= ' ' . $unit;
}
} else {
$value = 'Нет в наличии';
}
return $value;
}
echo format_price(1103.50); // 1 103,50 руб.
echo format_price(10100); // 10 100 руб.
echo format_price(0); // Нет в наличии
echo format_price(1000.00); // 1 000 руб.
Задача: в блоке нужно выделить цену другим шрифтом.
Решение: использовать замену по регулярному выражению.
Все цифры в переменной $price
обворачиваются тегом <span>
, которым можно задать отдельные CSS стили.