Работа с ценами PHP

1

Например, бывает при обработке прайс-листа у разных товаров цены указана в разном виде - 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
PHP
2
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 руб.
PHP
3

Задача: в блоке нужно выделить цену другим шрифтом.

Решение: использовать замену по регулярному выражению.

echo preg_replace('/(d+)/', '<span>$1</span>', $price);
PHP

Все цифры в переменной $price обворачиваются тегом <span>, которым можно задать отдельные CSS стили.

08.11.2016, обновлено 23.09.2021
15650
Предыдущая запись Сумма прописью PHP
Следующая запись Вычисление процентов в PHP

Комментарии

, чтобы добавить комментарий.

Другие публикации

Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
65100
+33
Яндекс.Доставка работа с API в PHP
Примеры работы с API Яндекс.Доставки (для заказа перевозки грузов корпоративным клиентам).
8571
+5
Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
15795
-1
Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
71775
+22
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
62078
+25
Очистка данных из форм в PHP
Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования кавычек не достаточно, нужен комплексный подход по типу данных.
11605
+6