有没有一种简单的方法可以让php camelcase为我提供一个字符串?我正在使用Laravel框架,我想在搜索功能中使用一些速记。
它看起来像以下......
private function search(Array $for, Model $in){
$results = [];
foreach($for as $column => $value){
$results[] = $in->{$this->camelCase($column)}($value)->get();
}
return $results;
}
被称为
$this->search(['where-created_at' => '2015-25-12'], new Ticket);
因此,我将使用的搜索功能中产生的调用是
$in->whereCreateAt('2015-25-12')->get();
唯一能解决的问题是骆驼套管......
答案 0 :(得分:9)
您是否考虑过使用Laravel内置的驼峰式功能?
$camel = camel_case('foo_bar');
详情请见:
答案 1 :(得分:4)
因此可以使用的一种可能的解决方案如下。
private function camelCase($string, $dontStrip = []){
/*
* This will take any dash or underscore turn it into a space, run ucwords against
* it so it capitalizes the first letter in all words separated by a space then it
* turns and deletes all spaces.
*/
return lcfirst(str_replace(' ', '', ucwords(preg_replace('/^a-z0-9'.implode('',$dontStrip).']+/', ' ',$string))));
}
这是由一个函数包装的单行代码,其中包含大量内容......
dontStrip
变量?简单地说,它是一个数组,应该包含你不想从camelCasing中删除的任何内容。
我们将数组中的每个元素都放入一个字符串中。
把它想象成这样:
function implode($glue, $array) {
// This is a native PHP function, I just wanted to demonstrate how it might work.
$string = '';
foreach($array as $element){
$string .= $glue . $element;
}
return $string;
}
这样你基本上可以将所有元素粘合在一起。
preg_replace
是一个函数,它使用regular expression(也称为正则表达式)来搜索并替换它找到的任何值,这些值与所需的正则表达式相匹配...
上面搜索中使用的正则表达式将您的数组$dontStrip
推向了一点a-z0-9
,这意味着任何字母A到Z以及数字0到9.小^
bit告诉正则表达式它正在寻找任何不属于它的东西。因此,在这种情况下,它正在查找不在您的数组或字母或数字中的任何和所有内容。
如果你是regex的新手并想要搞砸它,那么regex101就是一个很棒的地方。
这可以是最容易的,但作为大写单词。它将接受任何单词(一个单词是由空格分隔的任何字符),它将使第一个字母大写。
echo ucwords('hello, world!');
将打印“Hello,World!”
str_replace
是preg_replace
中规模较小,功能较弱但仍然非常有用的小弟弟/妹妹。我的意思是它有类似的用途。 str_replace
不是正则表达式,但确实使用了一个文字字符串,因此无论你在第一个参数中输入什么内容都是它所寻找的内容。
旁注,对于只考虑使用preg_replace的人来说,值得一提的是str_replace也能正常工作。在较大的应用中,str_replace被注意为benchmarked a bit faster而不是preg_replace。
lcfirst
什么?从PHP 5.3开始,我们已经能够使用lcfirst
函数,它非常像ucwords,它只是一个文本处理函数。 `lcfirst将第一个字母转换成小写形式。
echo lcfirst('HELLO, WORLD!');
将打印'你好,世界!'
考虑到这一点,camelCase函数使用不同的非字母数字字符作为断点,将字符串转换为camelCase字符串。
答案 2 :(得分:1)
这是一个通用的开源库,其中包含一种为多种常用案例格式执行大小写转换的方法。库名为TurboCommons,StringUtils中的formatCase()方法进行驼峰大小写转换。
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'
答案 3 :(得分:0)
使用内置的Laravel Helper函数 - camel_case()
$camelCase = camel_case('your_text_here');