Posts Tagged php

Функция разделения чисел по разрядам

Для удобного чтения числа лучше делить по разрядам, т.е. из 1000 сделать 1 000, 1000000 = 1 000 000 и т.д.
В PHP уже есть такая функция

  1. number_format($params, , ‘.’, ‘ ‘)

В ней существует непрятная особенность: она не принимает больше 1-го символа в качестве разделителей. Ловкость рук и числа выходят с  

  1. function print_price($params) {
  2. return str_replace(‘ ‘, ‘ ’, number_format($params, , ‘.’, ‘ ‘));
  3. }

Чтобы использовать эту функцию в популярном шаблонизаторе smarty, просто прописываем в доступном месте:

  1. $tpl->register_modifier(“print_price”, “print_price”);

Теперь можем писать {$number|print_price} прям в шаблоне.
PROFIT!

, , , ,

Комментариев нет

Функция правильных числовых окончаний

Иногда маленькая, но хорошая вещь доставляет огромное удовольствие.
Функция, которая ставит числовые окончания слова в нужной форме:

  1. function itemWords($col = 0) {
  2. $last = (int)substr($col, -1);
  3. if($last == ‘0′ || ($last > ‘4′ && $last <= ‘9′)) {
  4. $return = ‘товаров’;
  5. }elseif($last == ‘1′){
  6. $return = ‘товар’;
  7. }else{
  8. $return = ‘товара’;
  9. }
  10. return $return;
  11. }
  12. //Проверяем
  13. echo ‘2′, itemWords(2); //2 товара
  14. echo ‘1′, itemWords(1); //1 товар
  15. echo ‘102′, itemWords(102); //102 товара
  16. echo ‘38′, itemWords(38); //38 товаров
  17.  

enjoy!

,

Комментариев нет

Русские буквы в UTF-8

Часто бывает необходимо работать с кириллицей в UTF-8. PHP до сих не может корректно обрабатывать такие строки. На помощь приходит волшебная функция iconv();

Попробуем обработать русскую строку так, чтобы перевести строку в транслит(например для формирования корректного URL или имени файла для закачки). Напишем функцию rus2lat():

  1. function rus2lat($text) {
  2. $text = substr($text, 0, 250); //обрезаем текст до приличных размеров(для URL)
  3. $rus = array(‘ё’,‘й’,‘ц’,‘у’,‘к’,‘е’,‘н’,‘г’,‘ш’,‘щ’,‘з’,‘х’,‘ъ’,‘ф’,‘ы’,‘в’, ‘а’,‘п’,‘р’,‘о’,‘л’,‘д’,‘ж’,‘э’, ‘я’,‘ч’,‘с’,‘м’,‘и’,‘т’,‘ь’,‘б’,‘ю’, ‘ ‘); //задаем массив русских букв
  4. $eng = array(‘yo’,‘y’,‘c’,‘u’,‘k’,‘e’,‘n’,‘g’,’sh’,’sch’,‘z’,‘h’,‘_’,‘f’,‘i’,‘v’, ‘a’,‘p’,‘r’,‘o’,‘l’,‘d’,‘zh’,‘e’, ‘ya’,‘ch’,’s’,‘m’,‘i’,‘t’,‘_’,‘b’,‘yu’, ‘_’); //соразмерный массив транслита
  5.  
  6. $count = count($rus);
  7.  
  8. for($i = 0;$i <= $count; $i++) { //временно пережимаем всю кириллицу в WIN-1251, для корректной работы
  9. $russ[] = iconv(‘UTF-8′, ‘CP1251//IGNORE’,$rus[$i]); //IGNORE - символы, которых нет в конечной кодировке, будут опущены
  10.  }
  11.  
  12. $word = iconv(‘UTF-8′, ‘CP1251//IGNORE’, $text); //пережимаем текст в WIN-1251
  13. $word = str_replace($russ, $eng, strtolower($word)); //меняем кириллические символы на символы транслита. strtolower можно убрать, тогда придется добавить большие буквы в массивы $rus и $eng.
  14.  
  15. return iconv(‘CP1251//IGNORE’,‘UTF-8′, $word); //возращаем строку в UTF-8
  16. }

Результат работы:

  1. echo rus2lat(‘Привет мир!’); //Hello world. Шутка :) "privet_mir!"
  2.  

Таким же образом можно написать свои функции strtolower_ru(), strtoupper_ru(), ucfirst_ru() и др. Для этого просто надо поиграть со вторым массивом.

, , ,

Комментариев нет