PHP şi majuscule


Nu am uitat că luna trecută am început un serial dedicat celor care vor să facă primii paşi în PHP. Doar că după lovitura de server din 6 ianuarie (şi munca la migrarea unui alt sit mare al meu) nu reuşesc încă să mă adun. Gata cu scuzele. Acum aş dori să fac un copy & paste de toată frumuseţea la un cod pe care l-am găsit şi m-a ajutat la o problemă punctuală. Am importat datele a peste 2.500 de utilizatori de pe un sit (în ASP) pe altul (în PHP). Am avut un câmp editabil pentru oraş, aşa că acolo am găsit o varză incredibilă: de la Cluj-Napoca la cluj-napoca sau Cluj napoca. Similar la nume, ba cu majuscule, ba fără. După cum cei ce folosesc PHP ştiu cu siguranţă, există o funcţie, ucwords, ce transformă un „salut dragă ioane” în „Salut Dragă Ioane”.

Problema este că funcţia oferită de PHP merge doar dacă separatorul este spaţiul. De aceea „cluj-napoca” nu va deveni „Cluj-Napoca” ci doar „Cluj-napoca”. M-am bucurat să găsesc, chiar pe PHP.net, o funcţie mai generală, scrisă de un utilizator. Am copiat-o şi pus-o mai jos, cu gândul că poate îi va fi utilă cuiva. După cum se explică singură funcţia, ea acceptă doi parametrii: textul în care trebuie rezolvate majusculele şi respectiv lista delimitatorilor (sub forma unui string). Astfel, un apel de genul capitalizeWords(‘cluj-napoca’, ‘-‘) va rezolva problema conform aşteptărilor. Dacă doriţi să cuprindeţi mai multe cazuri, extindeţi parametrul al doilea: ‘ -+.;*()’. Simplu.

[PHP]function capitalizeWords($words, $charList = null) {
if (!isset($charList)) {
return ucwords($words);
}
$capitalizeNext = true;
for ($i = 0, $max = strlen($words); $i < $max; $i++) {
if (strpos($charList, $words[$i]) !== false) {
$capitalizeNext = true;
} else if ($capitalizeNext) {
$capitalizeNext = false;
$words[$i] = strtoupper($words[$i]);
}
}
return $words;
}[/PHP]

Exemple de apelare şi rezultatele pe care le dă.

[PHP]echo capitalizeWords(‘this is a test’); // This Is A Test
echo capitalizeWords(‘this-is-a-test’); // This-is-a-test
echo capitalizeWords(‘this is a test’, ‘ ‘); // This Is A Test
echo capitalizeWords(‘this-is-a-test’, ‘-‘); // This-Is-A-Test
echo capitalizeWords(‘this-is a-test’, ‘ ‘); // This-is A-test
echo capitalizeWords(‘this-is a-test’, ‘-‘); // This-Is a-Test
echo capitalizeWords(‘this-is a-test’, ‘ -‘); // This-Is A-Test[/PHP]


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 1,00 din 5)
Loading...Loading...

1 comentariu

  1. AccesInterzis spune:

    Frumos din partea ta ca ai postat functia. E foarte utila.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *