0

需要转型

PROP_RESOURCE_TYPE

propResourceType

或者

setPropResourceType

数量_和字符串长度不固定。

我不是很喜欢preg_replace,你能帮帮我吗

4

6 回答 6

8
lcfirst(implode(array_map('ucfirst', explode('_', strtolower($str)))));
于 2013-07-09T14:21:28.987 回答
3

为了完整起见,一个正则表达式如何提供帮助的示例:

// match each underscore followed by a letter
echo preg_replace_callback('/_([a-z])/', function($m) {
    return strtoupper($m[1]); // upper case the letter
}, strtolower('PROP_RESOURCE_TYPE'));
于 2013-07-09T14:27:13.497 回答
3

一种可能的解决方案:

<?php
$step1 = strtolower("PROP_RESOURCE_TYPE"); // prop_resource_type
$step2 = str_replace("_"," ",$step1); // prop resource type
$step3 = ucwords($step2); // Prop Resource Type
$step4 = str_replace(" ","",$step3); // PropResourceType
$step5 = "set".$step4;
?>
于 2013-07-09T14:21:47.430 回答
1

为了更加完整,一个正则表达式如何提供帮助的示例:

$subject = 'PROP_RESOURCE_TYPE';

// match uppercase varnames
echo preg_replace_callback('/[A-Z]+(?:_[A-Z]+)+/', function ($matches) {
    list($varName) = $matches;
    $varName = strtolower($varName);
    $varName = strtr($varName, '_', ' ');
    $varName = ucwords($varName);
    $varName = strtr($varName, [' ' => '']);

    $varName = 'set' . $varName;
    // or:
    // $varName[0] = strtolower($varName[0]);
    return $varName;
}, $subject);
于 2013-07-10T10:39:53.620 回答
0
// php 5.3.0+
$initial = 'PROP_RESOURCE_TYPE';
$words   = explode('_', $initial);
foreach($words as &$word){
    $word = ucfirst(strtolower($word));
}
$final = implode($words);
echo $final;
// returns PropResourceType

// if you want a lowercase first letter just do
echo lcfirst($final);
// returns propResourceType
于 2013-07-09T14:25:10.077 回答
0

另一种解决方案

echo preg_replace("/_([a-z])/e", 'strtoupper("$1")', strtolower($str));

自 PHP 5.5.0 起, EDITe修饰符已被弃用,所以要小心

EDIT2 @hakre 非常生气,我决定提一下,唯一的问题是:e可能导致E_DEPRECATED级别错误(通常在所有生产服务器上关闭)。无论如何它仍然适用于所有 PHP 版本

于 2013-07-09T14:37:12.283 回答