PHP

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

1

Сумма прописью

PHP >= 5.3.0, для более поздних версий возможен вариант представленный на habrahabr.ru.

function str_price($value)
{
    $value = explode('.', number_format($value, 2, '.', ''));

    $f = new NumberFormatter('ru', NumberFormatter::SPELLOUT);
    $str = $f->format($value[0]);

    // Первую букву в верхний регистр.
    $str = mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str));

    // Склонение слова "рубль".
    $num = $value[0] % 100;
    if ($num > 19) { 
        $num = $num % 10; 
    }    
    switch ($num) {
        case 1: $rub = 'рубль'; break;
        case 2: 
        case 3: 
        case 4: $rub = 'рубля'; break;
        default: $rub = 'рублей';
    }    
    
    return $str . ' ' . $rub . ' ' . $value[1] . ' копеек.';
}

echo str_price(150);    // Сто пятьдесят рублей 00 копеек.
echo str_price(1203);   // Одна тысяча двести три рубля 00 копеек.
echo str_price(2541);   // Две тысячи пятьсот сорок один рубль 00 копеек.
echo str_price(100000); // Сто тысяч рублей 00 копеек.
2

Привести цену к общему виду

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

Форматирование цены

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 руб.
4

Выделить цену другим шрифтом

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

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

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

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

В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...