需要转型
PROP_RESOURCE_TYPE
至
propResourceType
或者
setPropResourceType
数量_
和字符串长度不固定。
我不是很喜欢preg_replace
,你能帮帮我吗
需要转型
PROP_RESOURCE_TYPE
至
propResourceType
或者
setPropResourceType
数量_
和字符串长度不固定。
我不是很喜欢preg_replace
,你能帮帮我吗
lcfirst(implode(array_map('ucfirst', explode('_', strtolower($str)))));
为了完整起见,一个正则表达式如何提供帮助的示例:
// 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'));
一种可能的解决方案:
<?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;
?>
为了更加完整,一个正则表达式如何提供帮助的示例:
$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);
// 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
另一种解决方案
echo preg_replace("/_([a-z])/e", 'strtoupper("$1")', strtolower($str));
自 PHP 5.5.0 起, EDITe
修饰符已被弃用,所以要小心
EDIT2 @hakre 非常生气,我决定提一下,唯一的问题是:e
可能导致E_DEPRECATED
级别错误(通常在所有生产服务器上关闭)。无论如何它仍然适用于所有 PHP 版本