Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中设置字符串的大小写_Php_Regex_Laravel_Search_Eloquent - Fatal编程技术网

如何在php中设置字符串的大小写

如何在php中设置字符串的大小写,php,regex,laravel,search,eloquent,Php,Regex,Laravel,Search,Eloquent,有没有一种简单的方法可以让php camelcase为我创建一个字符串?我正在使用Laravel框架,我想在搜索功能中使用一些速记 它看起来像下面这样 private function search(Array $for, Model $in){ $results = []; foreach($for as $column => $value){ $results[] = $in->{$this->camelCase($column)}($val

有没有一种简单的方法可以让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();

唯一的问题是我不知道是骆驼壳…

所以一个可能的解决方案是下面的

私有函数camelCase($string,$dontStrip=[]){
/*
*这将采取任何破折号或下划线将它变成一个空格,运行ucwords对
*因此,它将所有单词中的第一个字母大写,并用空格隔开,然后
*打开并删除所有空格。
*/
返回lcfirst(str_replace(“”,“,”,ucwords(preg_replace(“/^a-z0-9.”内爆(“”,$dontStrip)。]+/“,”$string));
}
它是由一个函数包装的一行代码,有很多事情在进行

崩溃 什么是
dontStrip
变量? 简单地说,它是一个数组,应该包含您不希望从CAMELCASE中删除的任何内容

你在用那个变量做什么? 我们将获取数组中的每个元素,并将它们放入单个字符串中

可以这样想:

函数内爆($glue,$array){
//这是一个本机PHP函数,我只是想演示它是如何工作的。
$string='';
foreach($array作为$element){
$string.=$glue.$element;
}
返回$string;
}
通过这种方式,实际上就是将数组中的所有元素粘合在一起

preg_替换了什么,它在做什么?
preg_replace
是一个函数,它使用(也称为regex)搜索并替换它找到的与所需regex匹配的任何值

对正则表达式搜索的解释 上面搜索中使用的正则表达式将数组
$dontStrip
内爆到一点点
a-z0-9
上,这意味着任何字母a到Z以及数字0到9。小的
^
位告诉regex它正在寻找任何不是它后面的东西。因此,在本例中,它将查找数组或字母或数字之外的所有内容

如果你对regex还不熟悉,你想把它弄得乱七八糟,这是一个很好的地方

单词? 这可以很容易地作为大写词。它将接受任何单词(单词是由空格分隔的任何字符位),并将首字母大写

echo ucwords('hello,world!');
将打印“你好,世界!”

好的,我知道什么是预替换,什么是str\u替换?
str\u replace
preg\u replace
中较小、功能较弱但仍然非常有用的小弟弟/妹妹。我的意思是,它也有类似的用途
str_replace
不使用正则表达式,但使用文本字符串,因此在第一个参数中键入的内容正是它所要查找的内容

另外,值得一提的是,对于那些只考虑使用preg_replace的人来说,str_replace也同样适用。str_replace被认为比preg_replace更适用于大型应用程序

lcfirst
什么? 从PHP5.3开始,我们就可以使用
lcfirst
函数,它与ucwords非常相似,只是一个文本操作函数`lcfirst将第一个字母转换为小写形式

echo lcfirst('HELLO,WORLD!');
将打印“你好,世界!”

结果
记住所有这些,camelCase函数使用不同的非字母数字字符作为断点,将字符串转换为camelCase字符串。

您是否考虑过使用Laravel的内置camelCase函数

$camel = camel_case('foo_bar');
详细信息可在此处找到:


使用内置的Laravel辅助函数-camel_case()


有一个通用的开源库,其中包含一个方法,可以对几种流行的case格式执行case转换。该库称为TurboCommons,StringUtils中的formatCase()方法进行大小写转换

要使用它,请将phar文件导入到项目中,然后:

use org\turbocommons\src\main\php\utils\StringUtils;

echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE);

// will output 'sNakeCase'

哈哈哈,我甚至都没看过拉威尔的助手函数。非常感谢。这本可以帮我省下一个小时在网上闲逛,然后因为找不到我喜欢的东西而感到不安。只有你答案的第一部分与这个问题相关。。。ucwords仅在空格后和字符串开头部分大写单词的字母。它不会将其转换为驼峰式的大小写字符串,但您的第一个字符串会直接将其固定:)实际上,这是驼峰式大小写的一般方法。不,使用ucwords只能将单词的开头大写。它甚至不会删除空格或特殊字符,就像我们在编程中引用它时需要的那样。是的,这就是为什么我说一般,而不是特定于编程语言。好的,希望Laravel助手函数能为您工作:)感谢您的贡献:这不是驼峰案例,而是pascal案例。注意区别:
pascalCase
CamelCase
。此外,您还遗漏了一些情况,例如输入字符串是否为大写字母(如常量名称)。以下是函数的重写:
use org\turbocommons\src\main\php\utils\StringUtils;

echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE);

// will output 'sNakeCase'