show sidebar & content

Php ile in-un (iyelik eki) fonksiyonu

19 Tem 2010 / 0 Comments / in Genel, PHP

Örnek:
Ali’nin
Ayşe’nin
Cengiz‘in
Fatma’nın
Sistem de karakter problemi var, en kısa süre de çözerim herale.. (:


	$kelime = preg_replace('/[^a-zA-Z??ü?çö??Ü?ÇÖ]/ui', '', $kelime);

	$kelime = preg_replace("/({$sessiz}+)({$sessiz}+)(?={$sesli})/ui", "\1-\2", $kelime);

	$bol = explode('-', $kelime);
	for($i=0; $i3 ? preg_replace("/({$sesli}+)({$sessiz}+)(?={$sesli}+)/ui", "\1-\2\3", $bol[$i]) : $bol[$i];
	}

	if($diziOlarakDondur===true && $hecele===false) {
		$bol = implode('-', $bol);
		return explode("-", $bol);
	} else {
		return implode('-', $bol);
	}
}

function iyelikEkle($kelime) {
	$hece = hecele($kelime, true);
	$sonHece = $hece[count($hece)-1];

	$kalinSesli = "a?ou";
	$inceSesli = "eiöü";
	$sonHarf = ord(substr($sonHece, -1)) > 122 ? substr($sonHece, -2) : substr($sonHece, -1);
	$ek = "";

	if(preg_match("/[{$kalinSesli}{$inceSesli}]+/ui", $sonHarf)) {
		//Son harf sesli
		switch($sonHarf) {
			case "a":
			case "A":
			case "I":
			case "?":
				$ek = "n?n";
				break;
			case "e":
			case "E":
			case "i":
			case '?':
				$ek = "nin";
				break;
			case "o":
			case "O":
			case "u":
			case "U":
				$ek = "nun";
				break;
			case "ö":
			case "Ö":
			case "ü":
			case 'Ü':
				$ek = "nün";
				break;
		}
	} else {
		//Son harf sessiz
		if(preg_match("/[a?]+/ui", $sonHece)) {
			$ek = '?n';
		} elseif(preg_match("/[ei]+/ui", $sonHece)) {
			$ek = 'in';
		} elseif(preg_match("/[ou]+/ui", $sonHece)) {
			$ek = 'un';
		} elseif(preg_match("/[öü]+/ui", $sonHece)) {
			$ek = 'ün';
		}
	}

	// Büyük ? karakterinde ç?kan sorun için bu sat?r kalmal?
	$ek = empty($ek) ? 'nin' : $ek;
	return implode('', $hece).'''.$ek;
}

function cumleHecele($cumle, $diziOlarakDondur=false) {
	$bol = explode(' ', $cumle);
	$sonuc = array();

	foreach($bol as $kelime) {
		$sonuc[] = hecele($kelime, $diziOlarakDondur);
	}

	return(implode(' ', $sonuc));
}

//print_r(cumleHecele('isimlerin son hecelerine göre sonuna eklenecek tak?y? belirleyen bir fonksiyon var m?d?r? örn: Ahmet`in Osman`?n gibi sondaki "?n" "in" tak?lar?n? öncesinde gelen isme yada ismin son hecesine göre otomatik getiren bir yap?.', true));

//print_r(hecele("fanatikle?tirebildiklerimizdenmisiniz", true));

echo(iyelikEkle("Malik"));

Ayrıca şöye bir linkte’de şöyle bir function paylaşılmış

// ismin nikneymin sonuna iyelik eki ekler
function iyelik($ad)
{
$buyuk = array("A", "I", "E", "İ", "U","O", "Ü", "Ö");
$kucuk = array("a", "ı", "e", "i", "u","o", "ü", "ö");
$kucultulmus = str_replace($buyuk, $kucuk, $ad);

$isim=trim($kucultulmus);
$sonharf = substr($isim, -1);    // isimdeki son karakteri bulduk

/// aşağıdaki kısım regexp ile son sesli harfi buluyor.
/// bugcheck şeysi regexp özürlü turkce harfleri adam etmek için.

$bugcheckkaynak = array("ı", "ö", "ü");
$bugcheckhedef = array("a", "`", "`");
$bugfixed=str_replace($bugcheckkaynak, $bugcheckhedef, $isim);
preg_match_all('/[aeiou`]/', $bugfixed, $bulunanlar);
$sesliler=$bulunanlar[0];
$sonsesli=end($sesliler); //isimdeki son sesli harfi bulduk

if ($sonharf=="a" or $sonharf=="ı") {$eki="'nın";}
elseif ($sonharf=="e" or $sonharf=="i") {$eki="'nin";}
elseif ($sonharf=="u" or $sonharf=="o") {$eki="'nun";}
elseif ($sonharf=="ü" or $sonharf=="ö") {$eki="'nün";}

elseif ($sonsesli=="a" or $sonsesli=="ı") {$eki="'ın";}
elseif ($sonsesli=="e" or $sonsesli=="i") {$eki="'in";}
elseif ($sonsesli=="u" or $sonsesli=="o") {$eki="'un";}
elseif ($sonsesli=="`" ) {$eki="'ün";}

//isimde hiç sesli harf yoktur beki diye sağlama alıyoruz.
// zaten böyle nikneym olmaz olsun.
// aşağıdaki ikisinden hangisi imantıklı geliyorsa onu uncomment edin
else  {$eki="'ın";}
//else  {$eki=" isimli üyenin";}

/// Ahmet'in, Bengü'nün, Lost_Boy'un şeklinde yazılıyor
$sonuc= $ad.$eki;

 return $sonuc;
}
Tags: ,

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Bir Cevap Yazın