2010-05-10 1 views
3

Я не могу использовать strtolower, поскольку он влияет на весь символ. Должен ли я использовать какое-то регулярное выражение?Как сделать первый символ строчной строки в PHP?

Я получаю строку, которая является кодом продукта, я хочу использовать этот код продукта в качестве ключа поиска в другом ладони с первой буквой, сделанной в нижнем регистре.

ответ

9

Просто:

$str = "STACKoverflow"; 
$str[0] = strtolower($str[0]); // prints sTACKoverflow 

и если вы используете >=5.3 вы можете сделать:

$str = lcfirst($str); 
16

Попробуйте

  • lcfirst - Сделать первый символ строки в нижний регистр

и для PHP < 5.3 добавить это в глобальную область видимости:

if (!function_exists('lcfirst')) { 

    function lcfirst($str) 
    { 
     $str = is_string($str) ? $str : ''; 
     if(mb_strlen($str) > 0) { 
      $str[0] = mb_strtolower($str[0]); 
     } 
     return $str; 
    } 
} 

Преимущество выше над просто strolower При необходимости, если ваш PHP-код просто переключится на нативную функцию, как только вы встанете класс до PHP5.3

Обновлено после комментариев. Теперь функция проверяет, действительно ли в строке есть первый символ и что он является алфавитным символом в текущей локали. Теперь это тоже многобайтово.

+1

+1, но пользовательские функции lcfirst возможно, следует проверить, что строка не 0 длины. Он избегает уведомления, которое возникает, когда оно есть. – Yacoby

+1

вы должны использовать mb_strlen вместо strlen, поскольку strlen неправильно подсчитывает символы Unicode. (т. е. strlen («abcä») == 5, mb_strlen («abcä») == 4) – dbemerlin

1

использования icfirst()

<?php 
$foo = 'HelloWorld'; 
$foo = lcfirst($foo);    // helloWorld 

$bar = 'HELLO WORLD!'; 
$bar = lcfirst($bar);    // hELLO WORLD! 
$bar = lcfirst(strtoupper($bar)); // hELLO WORLD! 
?> 
0

Для многобайтной первой буквы строки ни один из выше примеры будут работать. В этом случае вы должны использовать:

function mb_lcfirst($string) 
{ 
    return mb_strtolower(mb_substr($string,0,1)) . mb_substr($string,1); 
}