Trzeba sprawdzać modulo 10 z liczby lub jej wartość. I tak:
x=1 => sekunda
x%10=2, 3, 4 => sekundy
reszta => sekund
co sprowadza się do:
if(x == 1)
$końcówka = 'a';
elseif( (x%10 == 2 OR x%10 == 3 OR x%10 == 4) AND !(x == 12 OR x == 13 OR x == 14) )
$koncówka = 'y';
else
$końcówka = '';
Oczywiście to jest dla sekund, minut i godzin, bo tylko one mają końcówki inne. W dniach i dalej zmienia się temat słowa. 12, 13 i 14 trzeba w warunku drugim dodatkowo wyeliminować z prostej przyczyny - dla liczb typu xxxxnaście końcówka jest zawsze ta sama i nie ma na nią wpływu modulo. Zresztą sam zobacz:
1 minuta, 2 minuty, 3 minuty, 4 minuty, 5 minut, (...) 11 minut, 12 minut, 13 minut, 14 minut, (...) 20 minut, 21 minut, 22 minuty, 23, minuty, 24 minuty, 25 minut, 26 minut, (...), 31 minut, 32 minuty... i tak dalej. Popatrz na końcówki jak się zmieniają

sekunda, sekundy, sekund
minuta, minuty, minut
godzina, godziny, godzin
dzień,
dni,
dnitydzień,
tygodnie,
tygodnimiesiąc,
miesiące,
miesięcyrok,
lata,
latwiek,
wieki,
wiekówmillenium,
millenia,
milleniówTak więc jeśli już chcesz pisać końcówki to napisz funkcję, która zwraca nie tyle końcówki co całe określenia w zależności od tego czego tyczy, a byłoby to określone drugim parametrem funkcji i w efekcie miałby coś w stylu...
function grammar($number, $what) {
switch($what) {
case 'sec':
if($number == 1)
return 'sekunda';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'sekundy';
else
return 'sekund';
break;
case 'min':
if($number == 1)
return 'minuta';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'minuty';
else
return 'minut';
break;
case 'hou':
if($number == 1)
return 'godzina';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'godziny';
else
return 'godzin';
break;
case 'day':
if($number == 1)
return 'dzień';
else
return 'dni';
break;
case 'wee':
if($number == 1)
return 'tydzień';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'tygodnie';
else
return 'tygodni';
break;
case 'mon':
if($number == 1)
return 'miesiąc';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'miesiące';
else
return 'miesięcy';
break;
case 'yea':
if($number == 1)
return 'rok';
elseif( ($number%10 == 2 OR $number%10 == 3 OR $number%10 == 4) AND !( $number == 12 OR $number == 13 OR $number == 14 ) )
return 'lata';
else
return 'lat';
break;
}
}
EDIT: zapomniałem dodać nawiasów obejmujących całość po AND. Bez niego po sprawdzeniu 12 automatycznie by wywaliło do else, i 13 lub 14 by się już załapało, a to byłby błąd.