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

Форум PHP

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

 

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

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

тема: помогите с условием...
 
 автор: afdm   (16.12.2007 в 00:03)   письмо автору
 
 

Собственно задача очень простая, но вот думаю как бы лучше:
Требуется выводить слово год (или года, или лет) после числа. Допустим, 50 лет, 51 год, 52 года и т.д.
пишу так:

<?php
  
// Допустим $r=52
  
$r = 52;
  
// Определяем последнюю цифру числа
  
$r = $r % 10; 
  
// Проверка последней цифры и вывод нужного окончания
  
if ($r==0 || $r==5 || $r==6 || $r==7 || $r==8 || $r==9 || $r%100==11 || $r%100==12 || $r%100==13 || $r%100==14) $a = "лет";
    elseif (
$r==1) $a = "год";
    elseif (
$r==2 || $r==3 || $r==4) $a = "года";

  echo 
$r, $a;
  
/* или же вместо || - xor  */
?>

Но уж больно длинно и запутанно получается...
Может упростить кто поможет...
Пробовал ещё через (новое для меня:)))

condition ? iftrue : iffalse;

Но что-то не хочет правильно работать...
И вообще, когда нужно использовать обычную конструкцию if...else, а когда: condition ? iftrue : iffalse;

   
 
 автор: Trianon   (16.12.2007 в 00:25)   письмо автору
 
   для: afdm   (16.12.2007 в 00:03)
 

Как насчет $r = 12 ?

   
 
 автор: afdm   (16.12.2007 в 00:44)   письмо автору
 
   для: Trianon   (16.12.2007 в 00:25)
 

ну да. работает вроде. завтра (ну т.е. уже сегодня) проверю.

   
 
 автор: sim5   (16.12.2007 в 00:44)   письмо автору
 
   для: afdm   (16.12.2007 в 00:03)
 

1 - это "год", от 2 по 4 это "года", от 5 по 20 и все остальное "лет". Зачем проверять 0, 5 ... 9?

   
 
 автор: afdm   (16.12.2007 в 00:46)   письмо автору
 
   для: sim5   (16.12.2007 в 00:44)
 

хм... а правда. завтра соображу :)

   
 
 автор: afdm   (16.12.2007 в 12:17)   письмо автору
 
   для: afdm   (16.12.2007 в 00:03)
 

ещё один вопрос можно?
насколько мне известно, в windows дата от 1902 до 2038 года?! так? т.е. после 2038 года
вот это

<?php
    
if ($r == 1) $text = "год";
    elseif (
$r == 2 xor $r == 3 xor $r == 4) $text = "года";
    else 
$text = "лет";
?>

перестает работать... А на *nix сервере как себя поведет? Там-то ведь дата имеет больший "диапазон"?

   
 
 автор: afdm   (16.12.2007 в 12:30)   письмо автору
 
   для: afdm   (16.12.2007 в 12:17)
 

да и ещё: почему-то не хочет работать с 11, 12, 13 и 14. как Трианон и говорил :(((

   
 
 автор: sim5   (16.12.2007 в 12:36)   письмо автору
 
   для: afdm   (16.12.2007 в 12:30)
 

Про возраст вот в этой теме долго велись баталии, kasmanaft не выдержал и выставил готовое решение. :) Про 2038 это вы откуда взяли?

   
 
 автор: afdm   (16.12.2007 в 12:44)   письмо автору
 
   для: sim5   (16.12.2007 в 12:36)
 

2038: проверял, щелкал календарик и после 2038 года возвращается отрицательный результат.
Все начинается с начала, с 1902 года, т.к. мне необходимо от текущего года отнять 1933.

   
 
 автор: sim5   (16.12.2007 в 12:48)   письмо автору
 
   для: afdm   (16.12.2007 в 12:44)
 

Какой календарик? А вы что на JS у клиента из под Windows получаете дату?

   
 
 автор: afdm   (16.12.2007 в 12:52)   письмо автору
 
   для: sim5   (16.12.2007 в 12:48)
 

да ну нет же! :))) это я просто проверял у себя на localhoste. А спрашиваю как себя это всё поведёт на реальном сервере, т.е. на *unix? там ведь вроде бы дата с XXXX до 9999?
значит всё норм. будет?!

ЗЫ а как быть с искл. ? с 12 например... Пробовал через case написать... не работает :(((

   
 
 автор: sim5   (16.12.2007 в 12:59)   письмо автору
 
   для: afdm   (16.12.2007 в 12:52)
 

А чего вы пытаетесь добиться с помощью XOR?

   
 
 автор: kasmanaft   (16.12.2007 в 14:05)   письмо автору
 
   для: afdm   (16.12.2007 в 12:52)
 

А как вы дату получаете?
Если $year = 2038; - то работать будет и с 2000038 годом..
Если с помощью time() (timestamp) - тогда, да. Наверное, будут проблемы.

   
 
 автор: afdm   (16.12.2007 в 12:45)   письмо автору
 
   для: afdm   (16.12.2007 в 12:17)
 

а как всё-таки быть-то с 12?

   
 
 автор: Nemezis   (16.12.2007 в 13:24)   письмо автору
 
   для: afdm   (16.12.2007 в 00:03)
 

Может как-то так:

<?php
function pluralForm($n, $form1, $form2, $form5)
{
    
$n = abs($n) % 100;
    
$n1 = $n % 10;
    if (
$n > 10 && $n < 20) return $form5;
    if (
$n1 > 1 && $n1 < 5) return $form2;
    if (
$n1 == 1) return $form1;
    return 
$form5;
}
$copyBook = 5;
echo 
'У вас ', $copyBook, ' ', pluralForm($copyBook, 'тетрадь.', 'тетради.', 'тетрадей.');

   
 
 автор: afdm   (16.12.2007 в 15:07)   письмо автору
 
   для: Nemezis   (16.12.2007 в 13:24)
 

Спасибо всем!!! всё, работает... :)))

   
Rambler's Top100
вверх

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