fork download
  1. <?php
  2.  
  3. /**
  4.  * Dobiera odpowiedni rzeczownik do liczebnika.
  5.  *
  6.  * Na przykładzie:
  7.  * fitVerbToNumeral(n, ["produkt", "produkty", "produktów"])
  8.  * dla n = 0 -> "0 produktów"
  9.  * dla n = 1 -> "1 produkt"
  10.  * dla n = 2 -> "2 produkty"
  11.  * dla n = 6 -> "6 produktów"
  12.  * i tak dalej
  13.  *
  14.  * @param int $number
  15.  * @param string[3] $strings
  16.  * @return string
  17.  * @throws Exception
  18.  */
  19. function fitVerbToNumeralEx($number, $strings) {
  20. if (count($strings) != 3) {
  21. throw new Exception('Do odmiany oczekiwano trzech rzeczowników!');
  22. }
  23.  
  24. // nie obsługujemy ujemnych
  25. if ($number < 0) {
  26. return $number;
  27. }
  28.  
  29. // przypadek jedynki
  30. if ($number == 1) {
  31. return sprintf('%d %s', $number, $strings[0]);
  32. }
  33.  
  34. // pierwsze dziesiątki
  35. if ($number >= 11 && $number <= 21) {
  36. return sprintf('%d %s', $number, $strings[2]);
  37. }
  38.  
  39. // weź ostatnią cyfrę
  40. $least = $number % 10;
  41.  
  42. if (in_array($least, [2, 3, 4])) {
  43. return sprintf('%d %s', $number, $strings[1]);
  44. }
  45.  
  46. // przypadek ostatni
  47. return sprintf('%d %s', $number, $strings[2]);
  48. }
  49.  
  50. for ($i = 0; $i < 50; $i++) {
  51. echo fitVerbToNumeralEx($i, ['produkt', 'produkty', 'produktów']) . "\r\n";
  52. }
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
0 produktów
1 produkt
2 produkty
3 produkty
4 produkty
5 produktów
6 produktów
7 produktów
8 produktów
9 produktów
10 produktów
11 produktów
12 produktów
13 produktów
14 produktów
15 produktów
16 produktów
17 produktów
18 produktów
19 produktów
20 produktów
21 produktów
22 produkty
23 produkty
24 produkty
25 produktów
26 produktów
27 produktów
28 produktów
29 produktów
30 produktów
31 produktów
32 produkty
33 produkty
34 produkty
35 produktów
36 produktów
37 produktów
38 produktów
39 produktów
40 produktów
41 produktów
42 produkty
43 produkty
44 produkty
45 produktów
46 produktów
47 produktów
48 produktów
49 produktów