Як написати власну функцію mb_ucfirst в PHP для UA мови

Нещодавно робив допис про PHP розширення php_mbstring, що передує сьогоднішньому огляду. Я підняв питання однобайтових та багатобайтових кодувань, опрацювання кирилиці і навів кілька прикладів для наочної різниці. Однак я попередив, що далеко не всі аналогічні вбудованим рядковим PHP функціям включає в себе розширення «php_mbstring». Сьогодні якраз той випадок, коли нам потрібен аналог функції ucfirst, але, на жаль, його не включено в розширення.

Функція ucfirst() піднімає першу літеру в слові до верхнього регістра.

<?php
echo ucfirst('hello'); // Змінить регістр першої літери на верхній і виведе «Hello»
?>
<?php
echo ucfirst('привіт'); // Не змінить регістр першої літери на верхній і виведе «привіт»
?>

Також маю підозру, що ви одразу спробуєте чи вже спробували наступний код:

<?php
echo mb_ucfirst(‘привіт’);
?>

І, звісно ж, отримаєте помилку — Fatal error: uncaught error call to undefined function mb_ucfirst()

Адже, як я казав раніше, функція mb_ucfirst() не існує в розширені php_mbstring. Так, це доволі дивно, чому така затребована функція не увійшла в розширення, натомість присутні щонайменше кілька функцій, які ніхто не використовує зовсім. Але маємо, що маємо, тож доведеться написати самому. Далі я наводжу дві реалізації, що більш всього імпонують моєму стилю програмування.

<?php
function mb_ucfirst($string, $encoding = null) {
    $first = mb_substr($string, 0, 1, $encoding); // перший символ рядка
    $last = mb_substr($string, 1, null, $encoding);  // решта рядка (окрім першого символу)
    return mb_strtoupper($first, $encoding) . $last; // піднімаємо перший символ у верхній регістр і формуємо фінальний рядок
}
?>
<?php
function mb_ucfirst($string, $encoding = null){
    preg_match_all("~^(.)(.*)$~u", $string, $arr); // пошук і збереження першого символу та залишку рядка в масиві $arr
    return mb_strtoupper($arr[1][0], $encoding). $arr[2][0]; // піднімаємо перший символ у верхній регістр і формуємо фінальний рядок
}
?>
VPS/VDS, хостинг Доступні VPS/VDS
2023-04-07   498