我怎样才能在php中创建一个字符串

时间:2016-01-04 18:40:11

标签: 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)}($value)->get();
    }
    return $results;
}

被称为

$this->search(['where-created_at' => '2015-25-12'], new Ticket);

因此,我将使用的搜索功能中产生的调用是

$in->whereCreateAt('2015-25-12')->get();

唯一能解决的问题是骆驼套管......

4 个答案:

答案 0 :(得分:9)

您是否考虑过使用Laravel内置的驼峰式功能?

$camel = camel_case('foo_bar');

详情请见:

https://laravel.com/docs/4.2/helpers#strings

答案 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,它在做什么?

preg_replace是一个函数,它使用regular expression(也称为正则表达式)来搜索并替换它找到的任何值,这些值与所需的正则表达式相匹配...

正则表达式搜索的说明

上面搜索中使用的正则表达式将您的数组$dontStrip推向了一点a-z0-9,这意味着任何字母A到Z以及数字0到9.小^ bit告诉正则表达式它正在寻找任何不属于它的东西。因此,在这种情况下,它正在查找不在您的数组或字母或数字中的任何和所有内容。

如果你是regex的新手并想要搞砸它,那么regex101就是一个很棒的地方。

ucwords?

这可以是最容易的,但作为大写单词。它将接受任何单词(一个单词是由空格分隔的任何字符),它将使第一个字母大写。

echo ucwords('hello, world!');

将打印“Hello,World!”

好的,我明白preg_replace是什么,str_replace是什么?

str_replacepreg_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');