PHP返回一个字符串,其中每个单词的第一个字符都是小写的

时间:2013-07-12 11:03:31

标签: php lowercase

PHP中已经存在一个名为ucwords的函数,它与我需要的函数恰好相反。

有没有这样的php库叫做lcwords?而不是将每个单词中的第一个大写,而是将它们转换为小写。

感谢。

8 个答案:

答案 0 :(得分:2)

这是一个班轮:

implode(' ', array_map(function($e) { return lcfirst($e); }, explode(' ', $words)))

示例

function lcwords($words) {
  return implode(' ', array_map(function($e) { return lcfirst($e); }, explode(' ', $words)));
}

$words = "First Second Third";
$lowercased_words = lcwords($words);
echo($lowercased_words);

答案 1 :(得分:1)

$string = "THIS IS SOME TEXT";
$string=explode(" ",$string);
$i=0;
while($i<count($string)){
    $string[$i] = lcfirst($string[$i]);
    $i++;
}
echo implode(" ",$string);

this link找到了另一个功能。

答案 2 :(得分:1)

这可能对您有所帮助

$str="hello";
$test=substr($str, 0,1);
$test2=substr($str, 1,strlen($str));
echo $test.strtoupper($test2);

答案 3 :(得分:0)

我不得不用正则表达式拍摄:

<?php
$pattern = "/(\b[a-zA-Z])(\w)/";
$string = "ThIs is A StriNG x y z!";

// This seems to work 
$result = preg_replace_callback($pattern, function($matches) {
    return (strtolower($matches[1]).$matches[2]);
}, $string);

echo $result;
echo "\r\n";

//This also seems to do the trick. Note that mb_ doesn't use / 
echo mb_ereg_replace('(\b[a-zA-Z])(\w{0,})', "strtolower('\\1') . '\\2'", $string, 'e');

// I wanted this to work but it didn't produce the expected result:
echo preg_replace($pattern, strtolower("\$1") . "\$2", $string);
echo "\r\n";

答案 4 :(得分:0)

更短的单线:

implode(' ',array_map('lcfirst',explode(' ',$text)))

答案 5 :(得分:0)

function lcwords(string $str) :string
{
    return preg_replace_callback('/(?<=^|\s)\w/', function (array $match) :string {
        return strtolower($match[0]);
    }, $str);
}

答案 6 :(得分:0)

我知道这个话题很古老,但问题仍然存在,这是一种耻辱(即使现在还没有lcwords())。

这是lcwords()小写每个单词的每个首字母。

简单地说:这个解决方案是通用的,任何标点都不应该是它的问题。当然,你支付它的价格:)


    /**
     * Lowercase the first character of each word in a string
     *
     * @param  string $string     The input string.
     * @param string $delimiters The optional delimiters contains the word separator characters (regular expression)
     *
     * @return string             Returns the modified string.
     */
    function lcwords($string, $delimiters = "\W_\t\r\n\f\v") {
        $string = preg_replace_callback("/([$delimiters])(\w)/", function($match) {
            return $match[1].lcfirst($match[2]);
        }, $string);

        return lcfirst($string); // Uppercase first char if it's the beginning of the line
    }

    // Here is a couple of result examples:

    echo lcwords("/SuperModule/ActionStyle/Controller.php").PHP_EOL;
    // result:    /superModule/actionStyle/controller.php

    echo lcwords("SEPARATED\tBY TABS\nAND\rSPACES").PHP_EOL;
    // result:    sEPARATED  bY tABS  aND  sPACES

    echo lcwords("HELLO").PHP_EOL;
    // result:    hELLO

    echo lcwords("HEELO HOW-ARE_YOU").PHP_EOL;
    // result:    hEELO hOW-aRE_yOU

    echo lcwords("SEPARATED\tBY TABS\nAND\rSPACES").PHP_EOL;
    // result:    sEPARATED  bY tABS  aND  sPACES

/([$delimiters])(\w)/ - 模式有两组:搜索1个非单词字符,后跟1个单词字符。然后单词字符将在回调中大写。因此,只有选定的字符集才会更新 - 内容的最小变化。

答案 7 :(得分:-2)

“在google中将字符串中的每个单词的第一个字符小写”,这是您获得的第一个响应:http://php.net/manual/en/function.lcfirst.php