Работа с ценами 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, обновлено 10.09.2019 2515
Предыдущая запись Сумма прописью PHP

Поделится

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

В статье приведен пример формы и php скрипта для безопасной загрузки файлов на сервер, метод отправки файлов через...
В случаях где анонсы не заполнены, сформировать и вывести их можно несколькими способами...
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
Данный вопрос возникает при верстке писем т.к. стили прописанные в head в почтовых сервисах и программах не работают, а...
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать...