Vardo linksniavimas su PHP

php-logo

Teko pasirašyti kelias funkcijas kad linksniuotų vardą ir pavardę pagal tris linksnius, kad kreipimasis sistemoje atrodytų natūralesnis. Žemiau pateikti 3 kodų blokai veikia tik su Lietuviškais vardais ir pavardėmis, kiek teko bandyti tai keičia tinkamai visada jeigu vardas ir pavardė yra sąmoningi :P – jeigu kokią klaidą pastebėtumėte, prašau pranešti komentaruose :)
Nesiu aš kietas PHP programeris tai ir kodas gal bus kiek lievokas, tačiau atitinka mano lūkesčius ir veikia. Good enough :D

Viską galima parsisiųsti iš čia.

Kodas naudininko linksniui (kam?):

<?php
 
/*
	Autorius: Kulverstukas
	Data: 2014.04.15
	Svetainė: http://9v.lt ; Evilzone.org ; Programisiai.lt
*/
 
/*
    Aprašymas:
        Funkcija tikrina ar žodis baigiasi su nurodyta galūne,
        gražina TRUE jei taip.
*/
function endsWith($haystack, $needle) {
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
 
/*
    Aprašymas:
        Funkcija priima vardą arba pavardę (turi būti vienas) ir gražina pakeistą
		į naudininko linksnį (kam?).
 
    Pavyzdžiai:
        Drasius Kedys         -> Drasiui Kedžiui
        Dalia Grybauskaitė    -> Daliai Grybauskaitei
        Andrius Kubilius      -> Andriui Kubiliui
        Loreta Graužinienė    -> Loretai Graužinienei
        Natalija Bunkė        -> Natalijai Bunkei
*/
function pakeistiVardaNaudininku($str) {
    $rtn = $str;
    $galunes = array(array("as", "ui"), array("a", "ai"), array("ė", "ei"), array("e", "ei"),
                     array("tis", "čiui"), array("dys", "džiui"), array("is", "iui"),
                     array("ys", "iui"), array("us", "ui"));
 
    for ($i = 0; $i < count($galunes); $i++) {
        if (endsWith($str, $galunes[$i][0])) {
            $rtn = substr($str, 0, strlen($str)-strlen($galunes[$i][0])).$galunes[$i][1];
            break;
        }
    }
 
    return $rtn;
}
 
echo pakeistiVardaNaudininku('Drasius'); echo pakeistiVardaNaudininku(' Kedys'); echo '<br />';
echo pakeistiVardaNaudininku('Dalia'); echo pakeistiVardaNaudininku(' Grybauskaitė'); echo '<br />';
echo pakeistiVardaNaudininku('Andrius'); echo pakeistiVardaNaudininku(' Kubilius'); echo '<br />';
echo pakeistiVardaNaudininku('Loreta'); echo pakeistiVardaNaudininku(' Graužinienė'); echo '<br />';
echo pakeistiVardaNaudininku('Natalija'); echo pakeistiVardaNaudininku(' Bunkė'); echo '<br />';
 
?>

Kodas kilmininko linksniui (ko?):

<?php
 
/*
	Autorius: Kulverstukas
	Data: 2014.04.15
	Svetainė: http://9v.lt ; Evilzone.org ; Programisiai.lt
*/
 
/*
    Aprašymas:
        Funkcija tikrina ar žodis baigiasi su nurodyta galūne,
        gražina TRUE jei taip.
*/
function endsWith($haystack, $needle) {
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
 
/*
    Aprašymas:
        Funkcija priima vardą arba pavardę (turi būti vienas) ir gražina pakeistą
		į kilmininko linksnį (ko?).
 
    Pavyzdžiai:
        Drasius Kedys         -> Drasiaus Kedžio
        Dalia Grybauskaitė    -> Dalios Grybauskaitės
        Andrius Kubilius      -> Andriaus Kubiliaus
        Loreta Graužinienė    -> Loretos Graužinienės
        Natalija Bunkė        -> Natalijos Bunkės
*/
function pakeistiVardaKilmininku($str) {
    $rtn = $str;
    $galunes = array(array("as", "o"), array("a", "os"), array("ė", "ės"), array("e", "es"),
                     array("tis", "čio"), array("dis", "džio"), array("dys", "džio"), array("is", "io"),
                     array("ys", "io"), array("us", "aus"));
 
    for ($i = 0; $i < count($galunes); $i++) {
        if (endsWith($str, $galunes[$i][0])) {
            $rtn = substr($str, 0, strlen($str)-strlen($galunes[$i][0])).$galunes[$i][1];
            break;
        }
    }
 
    return $rtn;
}
 
echo pakeistiVardaKilmininku('Drasius'); echo pakeistiVardaKilmininku(' Kedys'); echo '<br />';
echo pakeistiVardaKilmininku('Dalia'); echo pakeistiVardaKilmininku(' Grybauskaitė'); echo '<br />';
echo pakeistiVardaKilmininku('Andrius'); echo pakeistiVardaKilmininku(' Kubilius'); echo '<br />';
echo pakeistiVardaKilmininku('Loreta'); echo pakeistiVardaKilmininku(' Graužinienė'); echo '<br />';
echo pakeistiVardaKilmininku('Natalija'); echo pakeistiVardaKilmininku(' Bunkė'); echo '<br />';
 
?>

Kodas įnagininko linksniui (kuo?):

<?php
 
/*
	Autorius: Kulverstukas
	Data: 2014.04.15
	Svetainė: http://9v.lt ; Evilzone.org ; Programisiai.lt
*/
 
/*
    Aprašymas:
        Funkcija tikrina ar žodis baigiasi su nurodyta galūne,
        gražina TRUE jei taip.
*/
function endsWith($haystack, $needle) {
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
 
/*
    Aprašymas:
        Funkcija priima vardą arba pavardę (turi būti vienas) ir gražina pakeistą
		į įnagininko linksnį (kuo?).
 
    Pavyzdžiai:
        Drasius Kedys         -> Drasium Kedžiu
        Dalia Grybauskaitė    -> Dalia Grybauskaite
        Andrius Kubilius      -> Andrium Kubilium
        Loreta Graužinienė    -> Loreta Graužiniene
        Natalija Bunkė        -> Natalija Bunke
*/
function pakeistiVardaInagininku($str) {
    $rtn = $str;
    $galunes = array(array("as", "u"), array("ė", "e"), array("kis", "kiu"),
                     array("tis", "čiu"), array("dis", "džiu"), array("dys", "džiu"), array("ius", "ium"),
                     array("ys", "iu"));
 
    for ($i = 0; $i < count($galunes); $i++) {
        if (endsWith($str, $galunes[$i][0])) {
            $rtn = substr($str, 0, strlen($str)-strlen($galunes[$i][0])).$galunes[$i][1];
            break;
        }
    }
 
    return $rtn;
}
 
echo pakeistiVardaInagininku('Drasius'); echo pakeistiVardaInagininku(' Kedys'); echo '<br />';
echo pakeistiVardaInagininku('Dalia'); echo pakeistiVardaInagininku(' Grybauskaitė'); echo '<br />';
echo pakeistiVardaInagininku('Andrius'); echo pakeistiVardaInagininku(' Kubilius'); echo '<br />';
echo pakeistiVardaInagininku('Loreta'); echo pakeistiVardaInagininku(' Graužinienė'); echo '<br />';
echo pakeistiVardaInagininku('Natalija'); echo pakeistiVardaInagininku(' Bunkė'); echo '<br />';
 
?>

One comment

  1. Andrius says:

    Klaida kode, ne su Andrium, bet su Andriumi. Žr. http://vardai.vlkk.lt/vardas/Andrius

Leave a Reply

Your email address will not be published. Required fields are marked *