Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразование слова, взависимости от числа
 
 автор: JIEXA   (24.01.2005 в 22:24)   письмо автору
 
 

Вот сделал функцию, которая делает следующие:
из базы данных бертся число статей
она выводит:
56 статей
52 статьи
51 статья
то есть меняет слово взависимости от числа, только чем больше статей, тем больше приходится функцию делать:
<?php
function preobrazovatel($num$one$ed$mn)
{
        
# $one="статья";
        # $ed="статьи";
        # $mn="статей";
        
if($num===""){
        print
"";
        }
        if((
$num=="0") or
        (
$num >= "5") and ($num <= "20")or
        (
$num >= "25") and ($num <= "30")or
        (
$num >= "35") and ($num <= "40")or
        (
$num >= "45") and ($num <= "50")or
        (
$num >= "55") and ($num <= "60")or
        (
$num >= "65") and ($num <= "70")or
        (
$num >= "75") and ($num <= "80")or
        (
$num >= "85") and ($num <= "90")or
        (
$num >= "95") and ($num <= "100")or
        (
$num >= "105") and ($num <= "120")or
        (
$num >= "125") and ($num <= "130")or
        (
$num >= "135") and ($num <= "140")or
        (
$num >= "145") and ($num <= "150")or
        (
$num >= "155") and ($num <= "160")or
        (
$num >= "165") and ($num <= "170")or
        (
$num >= "175") and ($num <= "180")or
        (
$num >= "185") and ($num <= "190")or
        (
$num >= "195") and ($num <= "200")or
        (
$num >= "205") and ($num <= "220")or
        (
$num >= "225") and ($num <= "230")or
        (
$num >= "235") and ($num <= "240")or
        (
$num >= "245") and ($num <= "250")or
        (
$num >= "255") and ($num <= "260")or
        (
$num >= "265") and ($num <= "270")or
        (
$num >= "275") and ($num <= "280")or
        (
$num >= "285") and ($num <= "290")or
        (
$num >= "295") and ($num <= "300")
        )
        {
                 print
"$num $mn";
        }
        if((
$num=="1")
        or (
$num == "21")
        or (
$num == "31")
        or (
$num == "41")
        or (
$num == "51")
        or (
$num == "61")
        or (
$num == "71")
        or (
$num == "81")
        or (
$num == "91")
        or (
$num == "101")
        or (
$num == "121")
        or (
$num == "131")
        or (
$num == "141")
        or (
$num == "151")
        or (
$num == "161")
        or (
$num == "171")
        or (
$num == "181")
        or (
$num == "191")
        or (
$num == "201")
        or (
$num == "221")
        or (
$num == "231")
        or (
$num == "241")
        or (
$num == "251")
        or (
$num == "261")
        or (
$num == "271")
        or (
$num == "281")
        or (
$num == "291")
        )
        {
                print
"$num $one";
        }
        if((
$num >= "2") and ($num <= "4")
        or (
$num >= "22") and ($num <= "24")
        or (
$num >= "32") and ($num <= "34")
        or (
$num >= "42") and ($num <= "44")
        or (
$num >= "52") and ($num <= "54")
        or (
$num >= "62") and ($num <= "64")
        or (
$num >= "72") and ($num <= "74")
        or (
$num >= "82") and ($num <= "84")
        or (
$num >= "92") and ($num <= "94")
        or (
$num >= "102") and ($num <= "104")
        or (
$num >= "122") and ($num <= "124")
        or (
$num >= "132") and ($num <= "134")
        or (
$num >= "142") and ($num <= "144")
        or (
$num >= "152") and ($num <= "154")
        or (
$num >= "162") and ($num <= "164")
        or (
$num >= "172") and ($num <= "174")
        or (
$num >= "182") and ($num <= "184")
        or (
$num >= "192") and ($num <= "194")
        or (
$num >= "202") and ($num <= "204")
        or (
$num >= "222") and ($num <= "224")
        or (
$num >= "232") and ($num <= "234")
        or (
$num >= "242") and ($num <= "244")
        or (
$num >= "252") and ($num <= "254")
        or (
$num >= "262") and ($num <= "264")
        or (
$num >= "272") and ($num <= "274")
        or (
$num >= "282") and ($num <= "284")
        or (
$num >= "292") and ($num <= "294")


        )
        {
                print
"$num $ed";
        }


}
?>

Как уменьшить код функции, и сделать, чтоб она моглать роботать хоть с числом 1565

   
 
 автор: SS   (24.01.2005 в 22:38)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:24)
 

Смотря, какие цифры на конце числа, тот текст и подставить. А как это написать, я не знаю. :) Но вроде бы работает точно.
11 статей
1 статья
12 статей
2 статьи
13 статей
3 статьи
14 статей
4 статьи
5 статей
6 статей
7 статей
8 статей
9 статей
0 статей

   
 
 автор: JIEXA   (24.01.2005 в 22:41)   письмо автору
 
   для: SS   (24.01.2005 в 22:38)
 

Работает точно, но кода слишком много...:(

   
 
 автор: SS   (24.01.2005 в 22:45)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:41)
 

Почему много? Строк 15-20
если "*11", то пишем "*11 статей"
если не равно "*11" и равно "*1", то пишем "*1 статья"
и т.д.
Смысл такой.

   
 
 автор: JIEXA   (24.01.2005 в 22:49)   письмо автору
 
   для: SS   (24.01.2005 в 22:45)
 

Подожди те как несколько минут сейчас попробую кое-что

   
 
 автор: Akira   (24.01.2005 в 22:51)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:41)
 


<? 
########################Вывод слова человек(а)#########################
$str "3476473";
$last =  substr($str,(strlen($str)-1),strlen($str));
$first substr($str,0,1);
if (
$first != 1)
{
if (
$last == OR $last == OR $last == 4)
  {
  
$people=" Человека"// Присвоим Человека ,можно поменять на что угодно! Склоняем на 2,3,4
  
}
  
}
if (empty(
$people)) $people=" Человек"// Присвоим Человек ,можно поменять на что угодно! Склоняем на 0,1,5,6,7,8,9
#######################################################
?>

И при любых значениях будет выводитья 5 человек ,но 2 человека.
переделать легко.
2 статьи но 5 статей.
Работает хоть с 19847576768855...5
Апплодисментов не надо =Р
PS $str-число Лучше к нему прировнять Ваше, $people -содержит слово.

   
 
 автор: cheops   (24.01.2005 в 23:05)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:41)
 

Можно сделать примерно следующим образом:
<?php
function preobrazovatel($num$one$ed$mn

  
# $one="статья"; 
  # $ed="статьи"; 
  # $mn="статей"; 
  
if($num===""){ 
  print
""
  } 
  if((
$num=="0") or 
  ((
$num >= "5") and ($num <= "20")) or preg_match("|[056789]$|",$num)) 
  { 
    print
"$num $mn"
    return;
  } 
  if(
preg_match("|[1]$|",$num)) 
  { 
    print
"$num $one"
    return;
  } 
  if(
preg_match("|[234]$|",$num)) 
  { 
    print
"$num $ed"
    return;
  } 

?>

   
 
 автор: glsv (Дизайнер)   (24.01.2005 в 22:48)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:24)
 

Нужно проверять последний символ в числе.

<?php 
function preobrazovatel($num

        
$last substr($numstrlen($num)-1);
        if((
$num>="10") and ($num<="20") )
        { 
          print
"$num cтатей"
        } 
        else if(
          (
$last=="0") or 
          (
$last == "5") or 
          (
$last == "6") or 
          (
$last == "7") or 
          (
$last == "8") or 
          (
$last == "9")) 
        { 
           print
"$num cтатей"
        } 
        else if(
$last=="1")  
        { 
                print
"$num статья"
        } 
        else if(
          (
$last == "2") or
          (
$last == "3") or
          (
$last == "4")) 
        { 
                print
"$num статьи"
        } 

?>

   
 
 автор: Akira   (24.01.2005 в 22:53)   письмо автору
 
   для: glsv (Дизайнер)   (24.01.2005 в 22:48)
 

>Нужно проверять последний символ в числе.
Да? А если чило 12 ? Еще надо проверять что бы первое число не равно 1 =)
Что я благополучно и сделал....
И почему-то мой код по меньше Вашего класса =Р
Я его обычно использую для своих нужд. Типа счетчиков и т.д.
OFFTOP.
А есть ли смысл на такой код создовать function ?

   
 
 автор: JIEXA   (24.01.2005 в 23:07)   письмо автору
 
   для: Akira   (24.01.2005 в 22:53)
 

Да есть смысл
только так:
<?php
function preobrazovatel($num$one$ed$mn)
{
...

?>

И потом вызываешь
<?php
preobrazovatel
($numСтатьяСтатьиСтатей);
preobrazovatel($numФаилФайлаФайлов);
preobrazovatel($numразразараз);
?>

Вот и гибкости прибавилось )))

   
 
 автор: glsv (Дизайнер)   (24.01.2005 в 23:07)   письмо автору
 
   для: Akira   (24.01.2005 в 22:53)
 

>Да? А если чило 12 ?
Там есть проверка на 12.

>И почему-то мой код по меньше Вашего класса
Какого такого класса? :) Здесь нет ни моего класса, ни моей функции.

   
 
 автор: JIEXA   (24.01.2005 в 23:10)   письмо автору
 
   для: glsv (Дизайнер)   (24.01.2005 в 23:07)
 

Дизайнер, спасибо, вы не поможите вот по этому вопросу(http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1714&page=1) очень надо!

   
 
 автор: Akira   (24.01.2005 в 23:10)   письмо автору
 
   для: glsv (Дизайнер)   (24.01.2005 в 23:07)
 

а по-моему использование в такой мелочи класса только усложняет и запутывает =Р И все равно мой код меньше =Р

   
 
 автор: JIEXA   (24.01.2005 в 23:16)   письмо автору
 
   для: JIEXA   (24.01.2005 в 22:24)
 

Вообщем послоностью получилась такая функия:
<?php
function preobrazovatel($num$one$ed$mn)
{
        
$last substr($numstrlen($num)-1);
        if((
$num>="10") and ($num<="20") )
        {
          print
"$num $mn";
        }
        else if(
          (
$last=="0") or
          (
$last == "5") or
          (
$last == "6") or
          (
$last == "7") or
          (
$last == "8") or
          (
$last == "9"))
        {
           print
"$num $mn";
        }
        else if(
$last=="1")
        {
                print
"$num $one";
        }
        else if(
          (
$last == "2") or
          (
$last == "3") or
          (
$last == "4"))
        {
                print
"$num $ed";
        }
}
?>

Проверить её можно так:
<?php
while($t "10000")
{
        print 
preobrazovatel($tСтатьяСтатьиСтатей);
        print
"<br>";
        
$t++;

}
?>

Спасибо всем участникам форума!

   
 
 автор: Akira   (24.01.2005 в 23:51)   письмо автору
 
   для: JIEXA   (24.01.2005 в 23:16)
 

Всегда рады помочь...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования