<?php
/**
* Dobiera odpowiedni rzeczownik do liczebnika.
*
* Na przykładzie:
* fitVerbToNumeral(n, ["produkt", "produkty", "produktów"])
* dla n = 0 -> "0 produktów"
* dla n = 1 -> "1 produkt"
* dla n = 2 -> "2 produkty"
* dla n = 6 -> "6 produktów"
* i tak dalej
*
* @param int $number
* @param string[3] $strings
* @return string
* @throws Exception
*/
function fitVerbToNumeralEx($number, $strings) {
if (count($strings) != 3) { throw new Exception('Do odmiany oczekiwano trzech rzeczowników!');
}
// nie obsługujemy ujemnych
if ($number < 0) {
return $number;
}
// przypadek jedynki
if ($number == 1) {
return sprintf('%d %s', $number, $strings[0]); }
// pierwsze dziesiątki
if ($number >= 11 && $number <= 21) {
return sprintf('%d %s', $number, $strings[2]); }
// weź ostatnią cyfrę
$least = $number % 10;
return sprintf('%d %s', $number, $strings[1]); }
// przypadek ostatni
return sprintf('%d %s', $number, $strings[2]); }
for ($i = 0; $i < 50; $i++) {
echo fitVerbToNumeralEx($i, ['produkt', 'produkty', 'produktów']) . "\r\n";
}
PD9waHAKCi8qKgogKiBEb2JpZXJhIG9kcG93aWVkbmkgcnplY3pvd25payBkbyBsaWN6ZWJuaWthLgogKiAKICogTmEgcHJ6eWvFgmFkemllOgogKiAJCWZpdFZlcmJUb051bWVyYWwobiwgWyJwcm9kdWt0IiwgInByb2R1a3R5IiwgInByb2R1a3TDs3ciXSkKICogCQkJZGxhIG4gPSAwIC0+ICIwIHByb2R1a3TDs3ciCiAqIAkJCWRsYSBuID0gMSAtPiAiMSBwcm9kdWt0IgogKiAJCQlkbGEgbiA9IDIgLT4gIjIgcHJvZHVrdHkiCiAqIAkJCWRsYSBuID0gNiAtPiAiNiBwcm9kdWt0w7N3IgogKiAJCQlpIHRhayBkYWxlagogKiAKICogQHBhcmFtIGludCAkbnVtYmVyCiAqIEBwYXJhbSBzdHJpbmdbM10gJHN0cmluZ3MKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBFeGNlcHRpb24gCiAqLwpmdW5jdGlvbiBmaXRWZXJiVG9OdW1lcmFsRXgoJG51bWJlciwgJHN0cmluZ3MpIHsKCWlmIChjb3VudCgkc3RyaW5ncykgIT0gMykgewoJCXRocm93IG5ldyBFeGNlcHRpb24oJ0RvIG9kbWlhbnkgb2N6ZWtpd2FubyB0cnplY2ggcnplY3pvd25pa8OzdyEnKTsKCX0KCQoJLy8gbmllIG9ic8WCdWd1amVteSB1amVtbnljaAoJaWYgKCRudW1iZXIgPCAwKSB7CgkJcmV0dXJuICRudW1iZXI7Cgl9CgkKCS8vIHByenlwYWRlayBqZWR5bmtpCglpZiAoJG51bWJlciA9PSAxKSB7CgkJcmV0dXJuIHNwcmludGYoJyVkICVzJywgJG51bWJlciwgJHN0cmluZ3NbMF0pOwoJfQoJCgkvLyBwaWVyd3N6ZSBkemllc2nEhXRraQoJaWYgKCRudW1iZXIgPj0gMTEgJiYgJG51bWJlciA8PSAyMSkgewoJCXJldHVybiBzcHJpbnRmKCclZCAlcycsICRudW1iZXIsICRzdHJpbmdzWzJdKTsKCX0KCQoJLy8gd2XFuiBvc3RhdG5pxIUgY3lmcsSZCgkkbGVhc3QgPSAkbnVtYmVyICUgMTA7CgkKCWlmIChpbl9hcnJheSgkbGVhc3QsIFsyLCAzLCA0XSkpIHsKCQlyZXR1cm4gc3ByaW50ZignJWQgJXMnLCAkbnVtYmVyLCAkc3RyaW5nc1sxXSk7Cgl9CgkKCS8vIHByenlwYWRlayBvc3RhdG5pCglyZXR1cm4gc3ByaW50ZignJWQgJXMnLCAkbnVtYmVyLCAkc3RyaW5nc1syXSk7Cn0KCmZvciAoJGkgPSAwOyAkaSA8IDUwOyAkaSsrKSB7CgllY2hvIGZpdFZlcmJUb051bWVyYWxFeCgkaSwgWydwcm9kdWt0JywgJ3Byb2R1a3R5JywgJ3Byb2R1a3TDs3cnXSkgLiAiXHJcbiI7Cn0=