有人可以帮助我完成此PHP函数吗?我想要一个这样的字符串:'this-is-a-string'并将其转换为以下内容:'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
有人可以帮助我完成此PHP函数吗?我想要一个这样的字符串:'this-is-a-string'并将其转换为以下内容:'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
Answers:
无需正则表达式或回调。ucword几乎可以完成所有工作:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace(' ', '', ucwords(str_replace('-', ' ', $string)));
if (!$capitalizeFirstCharacter) {
$str[0] = strtolower($str[0]);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
如果您使用的是PHP> = 5.3,则可以使用lcfirst代替strtolower。
PHP 5.4.32 / 5.5.16中的ucword中添加了第二个参数,这意味着我们不需要首先将破折号更改为空格(感谢Lars Ebert和PeterM指出了这一点)。这是更新的代码:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
主要是为了提高可读性(尽管有些人可能会不同意)和/或降低代码复杂性。
通过使用接受分隔符作为参数的ucword,可以非常简单地完成此操作:
function camelize($input, $separator = '_')
{
return str_replace($separator, '', ucwords($input, $separator));
}
注意:需要php至少为5.4.32、5.5.16
return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
ucwords
有第二个参数delimiter
,str_replace("_", "", ucwords($input, "_"));
就足够了(在大多数情况下,:P
这是我如何处理它的变体。在这里,我有两个函数,第一个是camelCase可以将任何东西变成一个camelCase,如果变量已经包含cameCase,它也不会混乱。第二个uncamelCase将camelCase变成下划线(处理数据库密钥时的重要功能)。
function camelCase($str) {
$i = array("-","_");
$str = preg_replace('/([a-z])([A-Z])/', "\\1 \\2", $str);
$str = preg_replace('@[^a-zA-Z0-9\-_ ]+@', '', $str);
$str = str_replace($i, ' ', $str);
$str = str_replace(' ', '', ucwords(strtolower($str)));
$str = strtolower(substr($str,0,1)).substr($str,1);
return $str;
}
function uncamelCase($str) {
$str = preg_replace('/([a-z])([A-Z])/', "\\1_\\2", $str);
$str = strtolower($str);
return $str;
}
让我们同时测试:
$camel = camelCase("James_LIKES-camelCase");
$uncamel = uncamelCase($camel);
echo $camel." ".$uncamel;
单线超载,带有文档块...
/**
* Convert underscore_strings to camelCase (medial capitals).
*
* @param {string} $str
*
* @return {string}
*/
function snakeToCamel ($str) {
// Remove underscores, capitalize words, squash, lowercase first.
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $str))));
}
null
return
...更新,谢谢。这是测试3v4l.org/YBHPd
我可能会这样使用preg_replace_callback()
:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
return preg_replace_callback("/-[a-zA-Z]/", 'removeDashAndCapitalize', $string);
}
function removeDashAndCapitalize($matches) {
return strtoupper($matches[0][1]);
}
您正在寻找preg_replace_callback,可以像这样使用它:
$camelCase = preg_replace_callback('/-(.?)/', function($matches) {
return ucfirst($matches[1]);
}, $dashes);
function camelize($input, $separator = '_')
{
return lcfirst(str_replace($separator, '', ucwords($input, $separator)));
}
echo ($this->camelize('someWeir-d-string'));
// output: 'someWeirdString';
另外,如果您不想处理正则表达式,并希望避免显式循环,请执行以下操作:
// $key = 'some-text', after transformation someText
$key = lcfirst(implode('', array_map(function ($key) {
return ucfirst($key);
}, explode('-', $key))));
TurboCommons库在StringUtils类中包含一个通用的formatCase()方法,该方法使您可以将字符串转换为许多常见的大小写格式,例如CamelCase,UpperCamelCase,LowerCamelCase,snake_case,Title Case等。
https://github.com/edertone/TurboCommons
要使用它,请将phar文件导入您的项目,然后:
use org\turbocommons\src\main\php\utils\StringUtils;
echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE);
// will output 'sNakeCase'
这是方法源代码的链接:
试试这个:
$var='snake_case';
echo ucword($var,'_');
输出:
Snake_Case remove _ with str_replace
function camelCase($text) {
return array_reduce(
explode('-', strtolower($text)),
function ($carry, $value) {
$carry .= ucfirst($value);
return $carry;
},
'');
}
显然,如果也要匹配除'-'以外的另一个定界符,例如'_',那么它将不起作用,则preg_replace可以先将$ text中的所有(连续的)定界符转换为'-'。
此功能类似于@Svens的功能
function toCamelCase($str, $first_letter = false) {
$arr = explode('-', $str);
foreach ($arr as $key => $value) {
$cond = $key > 0 || $first_letter;
$arr[$key] = $cond ? ucfirst($value) : $value;
}
return implode('', $arr);
}
但更清楚一点,(我认为:D)并带有可选参数以使首字母大写与否。
用法:
$dashes = 'function-test-camel-case';
$ex1 = toCamelCase($dashes);
$ex2 = toCamelCase($dashes, true);
var_dump($ex1);
//string(21) "functionTestCamelCase"
var_dump($ex2);
//string(21) "FunctionTestCamelCase"
如果使用Laravel框架,则可以只使用camel_case()方法。
camel_case('this-is-a-string') // 'thisIsAString'
这是另一个选择:
private function camelcase($input, $separator = '-')
{
$array = explode($separator, $input);
$parts = array_map('ucwords', $array);
return implode('', $parts);
}
这是一个使用函数array_reduce方法的小辅助函数。至少需要PHP 7.0
private function toCamelCase(string $stringToTransform, string $delimiter = '_'): string
{
return array_reduce(
explode($delimiter, $stringToTransform),
function ($carry, string $part): string {
return $carry === null ? $part: $carry . ucfirst($part);
}
);
}
上面有很多好的解决方案,我可以提供一种以前没有人提及的不同方法。本示例使用数组。我在项目Shieldon Firewall上使用了这种方法。
/**
* Covert string with dashes into camel-case string.
*
* @param string $string A string with dashes.
*
* @return string
*/
function getCamelCase(string $string = '')
{
$str = explode('-', $string);
$str = implode('', array_map(function($word) {
return ucwords($word);
}, $str));
return $str;
}
测试一下:
echo getCamelCase('This-is-example');
结果:
ThisIsExample
试试这个:
return preg_replace("/\-(.)/e", "strtoupper('\\1')", $string);
这比较简单:
$string = preg_replace( '/-(.?)/e',"strtoupper('$1')", strtolower( $string ) );
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }