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

Форум PHP

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

 

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

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

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

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

<?php
  
// Допустим $r=52
  
$r 52;
  
// Определяем последнюю цифру числа
  
$r $r 10
  
// Проверка последней цифры и вывод нужного окончания
  
if ($r==|| $r==|| $r==|| $r==|| $r==|| $r==|| $r%100==11 || $r%100==12 || $r%100==13 || $r%100==14$a "лет";
    elseif (
$r==1$a "год";
    elseif (
$r==|| $r==|| $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 == xor $r == 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 && $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 Яндекс.Метрика Яндекс цитирования