Skip to content

Instantly share code, notes, and snippets.

@fomigo
Created April 14, 2012 07:59
Show Gist options
  • Star 38 You must be signed in to star a gist
  • Fork 16 You must be signed in to fork a gist
  • Save fomigo/2382775 to your computer and use it in GitHub Desktop.
Save fomigo/2382775 to your computer and use it in GitHub Desktop.
Russian Plural Form in PHP
<?php
/*
echo plural_form(42, array('арбуз', 'арбуза', 'арбузов'));
*/
function plural_form($n, $forms) {
return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
}
@scherbakoff
Copy link

$n = abs(intval($n));

@MurzNN
Copy link

MurzNN commented Oct 5, 2017

Will be good to add support for not-integer (float) numbers via this small change:

  return is_float($n)?$forms[1]:($n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]));

@sashabeep
Copy link

33 минут

@fomigo
Copy link
Author

fomigo commented Aug 12, 2021

OK, how about this:

echo 33 . ' ' . plural_form(33, ['минута', 'минуты', 'минут']);

@sashabeep
Copy link

@fomigo looks like i've mixed up the words order🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment