【问题标题】:Title-case words that are separated by underscores由下划线分隔的标题大小写词
【发布时间】:2018-03-24 07:14:42
【问题描述】:

我正在尝试将字符串转换为 TitleCase,然后再将其插入我的数据库。我正在使用ucwords

我的字符串是这样的:FIRST_SECOND_THIRD

我的代码:

if (//something){
    $resp = strtolower($line[14]);
    $resp_ = ucwords($resp, "_");

    //rest of the query...

}

var_dump($resp_) 返回null,我不知道为什么。

【问题讨论】:

  • 应该可以工作:3v4l.org/nXgvM
  • 奇怪,var_dump(ucwords(null, "_")); 返回一个空字符串
  • 5.5.16以下版本不支持ucwords()的第二个参数..
  • 您使用的是什么 PHP 版本?根据 PHP 变更日志,可选的 delimiter 参数被添加到 PHP 5.4 的 5.4.32 和 PHP 5.5 及更高版本的 5.5.16

标签: php string title-case humanize


【解决方案1】:

这完全一样,希望会有所帮助,干杯。

// php脚本

<?php

    $string = "FIRST_SECOND_THIRD";

    $var = strtolower(str_replace('_',' ',$string)); 
    $temp = ucwords($var);
    echo str_replace(' ', '', $temp);

?>

//output 
FirstSecondThird

如果 自定义分隔符 适用于 ucwords 函数,工作可能会容易一些。

【讨论】:

    【解决方案2】:

    如果您的输入字符串完全大写,那么您的意图是在跟在字符串开头或跟在下划线后面的字母之后的字母上使用strtolower()

    代码:(Demo)

    echo preg_replace_callback(
             '~(?:^|_)[A-Z]\K[A-Z]+~',
             function($m) {
                 return strtolower($m[0]);
             },
             'FIRST_SECOND_THIRD'
         );
    

    输出:

    First_Second_Third
    

    更简单,使用mb_convert_case(): (Demo)

    echo mb_convert_case('FIRST_SECOND_THIRD', MB_CASE_TITLE, 'UTF-8');
    // First_Second_Third
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2020-11-08
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      相关资源
      最近更新 更多