小写字符串,但不要触及每个单词的第一个字母

时间:2015-07-13 07:35:18

标签: php

基本上,我说有这个字符串:

BolTer LoToRoX iZ No GOud

我只想在每个单词的第一个字母之后小写所有内容,如此

Bolter Lotorox iz No Goud

我已经尝试过使用ucfirstucwordsstrtolower一段时间了。

ucfirst(strtolower($str));

会给我

Bolter lotorox iz no goud

ucwords(strtolower($str));

会给我

Bolter Lotorox Iz No Goud

哪个不是" goud"对我来说。

怎么可以这样做?

3 个答案:

答案 0 :(得分:0)

我相信这就是你所追求的:

<?php

function custom_lowercase( $string )
{
    // Explode the string by space
    $parts = explode( ' ', $string );

    // Return first character of each part and lowercase of the remaining parts
    $parts = array_map( function($a) {
        return mb_substr( $a, 0, 1 ) . strtolower( mb_substr( $a, 1 ) );
    }, $parts );

    // Return imploded string
    return implode( ' ', $parts );
}

$string = 'BolTer LoToRoX iZ No GOud';

echo "Original: " . $string . "<br />";
echo "Custom lowercase: " . custom_lowercase( $string );

?>

答案 1 :(得分:0)

快速而肮脏

<?php
   $str = 'BolTer LoToRoX iZ No GOud';
   $words = explode(' ',$str);
   $out = array();
   foreach ($words as $w) {
    $len = strlen($w);
    $nw = $w[0];
    $nw.=strtolower(substr($w,1));
    $out[]=$nw;         
   }
   $new_string = implode(' ',$out);
   echo $new_string;
   die;
  ?>

答案 2 :(得分:0)

   echo implode(' ', 
                array_map(function($i) { return $i[0] . strtolower(substr($i, 1)); },
                          explode(' ', $str)));  // Bolter Lotorox iz No Goud