Helyes névelő kezelés PHP-val

Helyes névelő kezelés PHP-val

Helyes névelő kezelés PHP-val

Vannak olyan esetek, amikor egy tömb elemeit olyan módon kell kilistáznunk, hogy elé el kell helyeznünk a megfelelő névelőt. Ilyen eset lehet például, amikor egy dinamikus weboldalon szeretnénk aloldalakat létrehozni és ezeknek az aloldalaknak egy paraméter alapján szeretnénk címet adni. Hogy érthetőbb legyen a példa, vegyünk fel 5 gyümölcsöt egy tömbbe, majd a tömb bejárásával írjuk ki őket.

PHP


<?php
$fruit_array = array('alma', 'körte', 'banán', 'ananász', 'narancs');

foreach ($fruit_array as $index => $fruit)
	{
	echo $fruit.' a(z) '.($index + 1).'. eleme a tömbnek.<br/>';
	}
?>

Eredmény

alma a(z) 1. eleme a tömbnek.
körte a(z) 2. eleme a tömbnek.
banán a(z) 3. eleme a tömbnek.
ananász a(z) 4. eleme a tömbnek.
narancs a(z) 5. eleme a tömbnek.

A listázás eredménye így is értelmes, de sokkal szebben néz ki, ha a gyümölcsök nevei előtt vannak névelők is.

Megoldás

Meg kell vizsgáljuk annak a szónak az első karakterét, ami elé szeretnénk beilleszteni a határozott névelőnket. A magyar nyelvtan szabályai szerint, ha ennek a szónak az első betűje mássalhangzó, akkor a határozott névelő az "a" lesz, kizárásos alapon, ha pedig magánhangzóval kezdődik a szó, akkor a határozott névelő a "az" lesz.

PHP


<?php
function get_definite_article($word, $result)
	{
	$first_char = substr($word, 0, 1);
	$char_array = array('q', 'w', 'r', 't', 'z', 'p', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'y', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'R', 'T', 'Z', 'P', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Y', 'X', 'C', 'V', 'B', 'N', 'M');
	if (in_array($first_char, $char_array))
		{
		$result_text = 'A';
		}
	else
		{
		$result_text = 'Az';
		}

	if ($result == 'get')
		{
		return $result_text;
		}
	elseif ($result == 'print')
		{
		echo $result_text;
		}
	}

$fruit_array = array('alma', 'körte', 'banán', 'ananász', 'narancs');

foreach ($fruit_array as $index => $fruit)
	{
	echo get_definite_article($fruit, 'get').' '.$fruit.' a(z) '.($index + 1).'. eleme a tömbnek.<br/>';
	}
?>

Eredmény

Az alma a(z) 1. eleme a tömbnek.
A körte a(z) 2. eleme a tömbnek.
A banán a(z) 3. eleme a tömbnek.
Az ananász a(z) 4. eleme a tömbnek.
A narancs a(z) 5. eleme a tömbnek.

Hogy egy valós környezetből vett példát is vegyünk, ezzel a megoldással készült a tanfolyamaink adatlapján szereplő kiírás is, ahol jelenleg nem hirdetünk időpontot.

PHP


<?php
//a bemutatás miatt felveszünk egy tetszőleges tömböt
//valós környezetben ennek a tömbnek az elemei az adatbázis lekérdezés eredményeit tárolnák
$data_tanfolyam = array();
$data_tanfolyam['nev'] = 'webprogramozó';

function get_definite_article($word, $result)
	{
	$first_char = substr($word, 0, 1);
	$char_array = array('q', 'w', 'r', 't', 'z', 'p', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'y', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'R', 'T', 'Z', 'P', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Y', 'X', 'C', 'V', 'B', 'N', 'M');
	if (in_array($first_char, $char_array))
		{
		$result_text = 'a';
		}
	else
		{
		$result_text = 'az';
		}

	if ($result == 'get')
		{
		return $result_text;
		}
	elseif ($result == 'print')
		{
		echo $result_text;
		}
	}
?>

HTML


<p>Jelenleg <?php echo get_definite_article($data_tanfolyam['nev'], 'get').' '.$data_tanfolyam['nev']; ?> tanfolyamunkon nincs meghírdetett időpont.</p>

Eredmény

Jelenleg a webprogramozó tanfolyamunkon nincs meghírdetett időpont.

Az előző példában látható egy alternatív megoldás ugyan erre a problémára: "a(z)". Elfogadható megoldásnak, de lássuk be, hogy nem szép és a számok esetén szintén hasznos lehet jól alkalmazni a függvényt. Ehhez csak annyit kell tennünk, hogy a mássalhangzókat tartalmazó tömböt ki kell egészítenünk a számokkal. De a számok esetén akad még egy problémánk, még pedig az, hogy a 10 első karaktere szintén "1" és az egynek is az első karaktere az "1", de az előtte alkalmazható határozott névelő nem ugyan az. Ezért ennek a problémának a megoldására kell írni egy kivételt.


<?php
function get_definite_article($word, $capital, $result)
	{
	$first_char = substr($word, 0, 1);
	if (strlen($word) >= 2)
		{
		$first_two_chars = substr($word, 0, 2);
		}
	else
		{
		$first_two_chars = $word;
		}
	$char_array = array('q', 'w', 'r', 't', 'z', 'p', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'y', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'R', 'T', 'Z', 'P', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', '0', '2', '3', '4', '6', '7', '8', '9');
	if (in_array($first_char, $char_array))
		{
		$result_text = 'A';
		}
	else
		{
		if ((is_numeric($first_two_chars)) && ((int)$first_two_chars > 9))
			{
			$result_text = 'A';
			}
		else
			{
			$result_text = 'Az';
			}
		}

	if ($capital == 'lower')
		{
		$result_text = strtolower($result_text);
		}

	if ($result == 'get')
		{
		return $result_text;
		}
	elseif ($result == 'print')
		{
		echo $result_text;
		}
	}

$fruit_array = array('alma', 'körte', 'banán', 'ananász', 'narancs', 'kiwi', 'kókusz', 'avokádó', 'licsi', 'szilva', 'dinnye');

foreach ($fruit_array as $index => $fruit)
	{
	echo get_definite_article($fruit, 'upper', 'get').' '.$fruit.' '.get_definite_article($index + 1, 'lower', 'get').' '.($index + 1).'. eleme a tömbnek.<br/>';
	}
?>

Eredmény

Az alma az 1. eleme a tömbnek.
A körte a 2. eleme a tömbnek.
A banán a 3. eleme a tömbnek.
Az ananász a 4. eleme a tömbnek.
A narancs az 5. eleme a tömbnek.
A kiwi a 6. eleme a tömbnek.
A kókusz a 7. eleme a tömbnek.
Az avokádó a 8. eleme a tömbnek.
A licsi a 9. eleme a tömbnek.
A szilva a 10. eleme a tömbnek.
A dinnye a 11. eleme a tömbnek.

Demo letöltése

Leírásaink azon kezdő és haladó programozóknak nyújtanak segítséget, akik már minimális szinten foglalkoztak weboldalkészítéssel. Ha szeretnél jobban elmélyülni a témában, vagy elsajátítani alapokat, még tovább fejlődni, akkor nézz körbe tanfolyam kínálatunkban, ahol a kezdőtől a profi szintig nyújtunk képzéseket a számodra.

Oszd meg barátaiddal is!

Facebook Twitter Linkedin

Elérhetőségeink

  • Címünk: 1139 Budapest, Frangepán utca 3. (1. emelet)

  • Ügyfélfogadás, beiratkozás: Hétfőtől - péntekig: 09:00-17:00

  • Telefonszámunk: 06 70 604 2060, vagy 06 1 4500 110

  • E-mail címünk:

Közösségünk