/* * @quantity int число для которого выводим склонение * @arForms array массив форм слова формата (единственное число, двойственное, множественное), например array('этаж','этажей','этажа') или ('а','','ы') для слова "Квартир".nc_numeral_inclination(20, array('этаж','этажей','этажа') ) */ function nc_numeral_inclination($quantity, $arForms) { $string = strval($quantity); $len = strlen($string); if ($len > 1) { $prev_last_digit = $string[$len - 2]; } else { $prev_last_digit = 0; } $last_digit = $string[$len - 1]; if ($last_digit == 1 && $prev_last_digit != 1) { return $arForms[0]; } if ($last_digit == 0 || ($prev_last_digit == 1 && $last_digit == 1) || (($prev_last_digit == 1)) || ($last_digit >= 5 && $last_digit <= 9)) { return $arForms[1]; } if (($last_digit >= 2 && $last_digit <= 4) && !($quantity >= 11 && $quantity < 20)) { return $arForms[2]; } }