|
|
|
| Вот сделал функцию, которая делает следующие:
из базы данных бертся число статей
она выводит:
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 | |
|
|
|
|
|
|
|
для: JIEXA
(24.01.2005 в 22:24)
| | Смотря, какие цифры на конце числа, тот текст и подставить. А как это написать, я не знаю. :) Но вроде бы работает точно.
11 статей
1 статья
12 статей
2 статьи
13 статей
3 статьи
14 статей
4 статьи
5 статей
6 статей
7 статей
8 статей
9 статей
0 статей | |
|
|
|
|
|
|
|
для: SS
(24.01.2005 в 22:38)
| | Работает точно, но кода слишком много...:( | |
|
|
|
|
|
|
|
для: JIEXA
(24.01.2005 в 22:41)
| | Почему много? Строк 15-20
если "*11", то пишем "*11 статей"
если не равно "*11" и равно "*1", то пишем "*1 статья"
и т.д.
Смысл такой. | |
|
|
|
|
|
|
|
для: SS
(24.01.2005 в 22:45)
| | Подожди те как несколько минут сейчас попробую кое-что | |
|
|
|
|
|
|
|
для: 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 == 3 OR $last == 2 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 -содержит слово. | |
|
|
|
|
|
|
|
для: 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;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(24.01.2005 в 22:24)
| | Нужно проверять последний символ в числе.
<?php
function preobrazovatel($num)
{
$last = substr($num, strlen($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 статьи";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(24.01.2005 в 22:48)
| | >Нужно проверять последний символ в числе.
Да? А если чило 12 ? Еще надо проверять что бы первое число не равно 1 =)
Что я благополучно и сделал....
И почему-то мой код по меньше Вашего класса =Р
Я его обычно использую для своих нужд. Типа счетчиков и т.д.
OFFTOP.
А есть ли смысл на такой код создовать function ? | |
|
|
|
|
|
|
|
для: Akira
(24.01.2005 в 22:53)
| | Да есть смысл
только так:
<?php
function preobrazovatel($num, $one, $ed, $mn)
{
...
}
?>
|
И потом вызываешь
<?php
preobrazovatel($num, Статья, Статьи, Статей);
preobrazovatel($num, Фаил, Файла, Файлов);
preobrazovatel($num, раз, раза, раз);
?>
|
Вот и гибкости прибавилось ))) | |
|
|
|
|
|
|
|
для: Akira
(24.01.2005 в 22:53)
| | >Да? А если чило 12 ?
Там есть проверка на 12.
>И почему-то мой код по меньше Вашего класса
Какого такого класса? :) Здесь нет ни моего класса, ни моей функции. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(24.01.2005 в 23:07)
| | Дизайнер, спасибо, вы не поможите вот по этому вопросу(http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1714&page=1) очень надо! | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(24.01.2005 в 23:07)
| | а по-моему использование в такой мелочи класса только усложняет и запутывает =Р И все равно мой код меньше =Р | |
|
|
|
|
|
|
|
для: JIEXA
(24.01.2005 в 22:24)
| | Вообщем послоностью получилась такая функия:
<?php
function preobrazovatel($num, $one, $ed, $mn)
{
$last = substr($num, strlen($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++;
}
?>
|
Спасибо всем участникам форума! | |
|
|
|
|
|
|
|
для: JIEXA
(24.01.2005 в 23:16)
| | Всегда рады помочь... | |
|
|
|