xom`s pinion - Tom Hnatovsky Blog
Rozdělení jména a příjmení v PHP
Na základě článku Marka Prokopa o Lazy registration v e-shopu jsem se zamýšlel nad myšlenkou dělení celého jména na křestní jméno a příjmení.
Hledal jsem možné hotové PHP knihovny, které by si s tímto úkolem poradily, ale nic jsem nenašel, tak jsem si o Silvestru místo juchání napsal svou, o kterou se chci nyní podělit.
Základní ideaKnihovna pracuje s databází křestních jmen a má jednu metodu, která z jednoho stringu vrací pole obsahující oddělené jméno a příjmení.
Stažení a ukázkový kód
Knihovna je volně ke stažení na bitbucket.org/xomax/namesplitter
require 'NameSplitter.php';
$splitter = new NameSplitter;
var_dump($splitter->splitName('Ta Duc Trunc'));
// vypíše array(2) { ["firstName"]=> string(6) "Ta Duc" ["surname"]=> string(5) "Trunc" }
Jednoduché a nezávislé na frameworku, redakčním systému, použitelné všude.
Databáze jmen
Jako databázi křestních jmen jsem použil seznam z webu MVČR, který obsahuje téměř 600 tisíc záznamů, mezi kterými je i mnoho exotických jmen. Pro použití v Česku je to dostačující, při použití v zahraničním projektu bych doporučil se poohlédnout po jiné databázi.
Poznámka: Jména jsou v databázi velkými písmeny abych zachoval možnost jednoduché aktualizace přímo ze zdrojů MVČR, kde je takto mají vedeny.
Další vývoj
Budoucí verze by měla obsahovat podporu pro akademické tituly (další položka návratového pole).
Také si pohrávám s myšlenkou vracet pole hodnot namísto sloučeného stringu křestních jmen / příjmení.
Poslední věcí, která mě trápí jsou jména, která neobsahují jméno z databáze nebo všechna jména jsou v ní obsažena. První případ nyní vrací celé jméno jako příjmení a křestní jméno zůstává nevyplněno. Druhý případ je složitější - jak vybrat správné jméno, které má být příjmením? Nyní to funguje tak, že se vrací poslední jméno jako příjmení. Napadlo mě, že by šlo u křestních jmen držet jejich četnost a na základě porovnání četnosti se rozhodnout, co je pravděpodobnějším křestním jménem, ale to by prostě nefungovalo - dříve nebo později by došlo k omylu.
Znáte jiné řešení?
Pokud znáte nějakou jinou funkční knihovnu, podělte se. Dost pravděpodobně bude propracovanější.
Pokud na nic jiného nenarazím, budu pokračovat v údržbě NameSplitteru.
Tomáš Hnatovský 10.10.18 18:36
Oživeno v Githubu: https://github.com/…ame-splitter