answer
143
Không có regex hoặc gọi lại cần thiết. Hầu như tất cả các công việc có thể được thực hiện với ucwords:
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'];
Nếu bạn đang sử dụng PHP> = 5.3, bạn có thể sử dụng lcfirst thay vì strtolower.
Cập nhật
Một tham số thứ hai đã được thêm vào ucwords trong PHP 5.4.32 / 5.5.16, điều đó có nghĩa là trước tiên chúng ta không cần thay đổi dấu gạch ngang thành dấu cách [nhờ Lars Ebert và PeterM đã chỉ ra điều này]. Đây là mã cập nhật:
function dashesToCamelCase[$string, $capitalizeFirstCharacter = false]
{
$str = str_replace['-', '', ucwords[$string, '-']];
if [!$capitalizeFirstCharacter] {
$str = lcfirst[$str];
}
return $str;
}
echo dashesToCamelCase['this-is-a-string'];
143 hữu ích 3 bình luận chia sẻ
answer
41
Điều này có thể được thực hiện rất đơn giản, bằng cách sử dụng ucwords chấp nhận dấu phân cách là param:
function camelize[$input, $separator = '_']
{
return str_replace[$separator, '', ucwords[$input, $separator]];
}
LƯU Ý: Cần php ít nhất 5.4.32, 5.5.16
41 hữu ích 4 bình luận chia sẻ
answer
7
đây là biến thể của tôi về cách đối phó với nó. Ở đây tôi có hai chức năng, đầu tiên một camelCase biến bất cứ thứ gì thành camelCase và nó sẽ không gây rối nếu biến đã chứa cameCase. UncamelCase thứ hai biến camelCase thành dấu gạch dưới [tính năng tuyệt vời khi xử lý các khóa cơ sở dữ liệu].
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;
}
hãy kiểm tra cả hai:
$camel = camelCase["James_LIKES-camelCase"];
$uncamel = uncamelCase[$camel];
echo $camel." ".$uncamel;
7 hữu ích 1 bình luận chia sẻ
answer
5
Tôi có thể sẽ sử dụng preg_replace_callback[]
, như thế này:
function dashesToCamelCase[$string, $capitalizeFirstCharacter = false] {
return preg_replace_callback["/-[a-zA-Z]/", 'removeDashAndCapitalize', $string];
}
function removeDashAndCapitalize[$matches] {
return strtoupper[$matches[0][1]];
}
5 hữu ích 0 bình luận chia sẻ
answer
4
Bạn đang tìm kiếm preg numplace_callback , bạn có thể sử dụng nó như thế này:
$camelCase = preg_replace_callback['/-[.?]/', function[$matches] {
return ucfirst[$matches[1]];
}, $dashes];
4 hữu ích 0 bình luận chia sẻ
answer
4
Quá tải một lớp, với khối tài liệu ...
/**
* 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]]]];
}
4 hữu ích 4 bình luận chia sẻ
answer
3
$string = explode[ "-", $string ];
$first = true;
foreach[ $string as &$v ] {
if[ $first ] {
$first = false;
continue;
}
$v = ucfirst[ $v ];
}
return implode[ "", $string ];
Mã chưa được kiểm tra. Kiểm tra các tài liệu PHP cho các hàm im- / explode và ucfirst.
3 hữu ích 0 bình luận chia sẻ
answer
3
function camelize[$input, $separator = '_']
{
return lcfirst[str_replace[$separator, '', ucwords[$input, $separator]]];
}
echo [$this->camelize['someWeir-d-string']];
// output: 'someWeirdString';
3 hữu ích 0 bình luận chia sẻ
answer
2
Một lớp lót, PHP> = 5.3:
$camelCase = lcfirst[join[array_map['ucfirst', explode['-', $url]]]];
2 hữu ích 1 bình luận chia sẻ
answer
1
Ngoài ra, nếu bạn không muốn xử lý regex và muốn tránh các vòng lặp rõ ràng :
// $key = 'some-text', after transformation someText
$key = lcfirst[implode['', array_map[function [$key] {
return ucfirst[$key];
}, explode['-', $key]]]];
1 hữu ích 0 bình luận chia sẻ
answer
1
Đây là giải pháp rất rất dễ dàng trong một mã dòng
$string='this-is-a-string' ;
echo str_replace['-', '', ucwords[$string, "-"]];
đầu ra ThisIsAString
1 hữu ích 0 bình luận chia sẻ
answer
1
Thư viện TurboCommons chứa phương thức định dạng mục đích chung bên trong lớp StringUtils, cho phép bạn chuyển đổi một chuỗi thành nhiều định dạng trường hợp phổ biến, như CamelCase, UpperCamelCase, LowerCamelCase, Snake_case, Title Case, và nhiều hơn nữa.
//github.com/edertone/TurboCommons
Để sử dụng nó, hãy nhập tệp phar vào dự án của bạn và:
use org\turbocommons\src\main\php\utils\StringUtils;
echo StringUtils::formatCase['sNake_Case', StringUtils::FORMAT_CAMEL_CASE];
// will output 'sNakeCase'
Đây là liên kết đến mã nguồn phương thức:
//github.com/edertone/TurboCommons/blob/b2e015cf89c8dbe372a5f5515e7d9763f45eba76/TurboCommons-Php/src/main/php/utils/StringUt
1 hữu ích 0 bình luận chia sẻ
answer
1
Thử đi:
$var='snake_case';
echo ucword[$var,'_'];
Đầu ra:
Snake_Case remove _ with str_replace
1 hữu ích 0 bình luận chia sẻ
answer
0
function camelCase[$text] {
return array_reduce[
explode['-', strtolower[$text]],
function [$carry, $value] {
$carry .= ucfirst[$value];
return $carry;
},
''];
}
Rõ ràng, nếu một dấu phân cách khác hơn '-', ví dụ '_', cũng được khớp, thì điều này sẽ không hoạt động, sau đó một preg numplace có thể chuyển đổi tất cả các dấu phân cách [liên tiếp] thành '-' trong văn bản $ trước ...
0 hữu ích 1 bình luận chia sẻ
answer
0
Chức năng này tương tự như chức năng của @ 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];
}
Nhưng rõ ràng hơn, [tôi nghĩ: D] và với tham số tùy chọn để viết hoa chữ cái đầu tiên hay không.
Sử dụng:
$dashes = 'function-test-camel-case';
$ex1 = toCamelCase[$dashes];
$ex2 = toCamelCase[$dashes, true];
var_dump[$ex1];
//string[21] "functionTestCamelCase"
var_dump[$ex2];
//string[21] "FunctionTestCamelCase"
0 hữu ích 0 bình luận chia sẻ
answer
0
Một cách tiếp cận đơn giản khác:
$nasty = [' ', '-', '"', "'"]; // array of nasty characted to be removed
$cameled = lcfirst[str_replace[$nasty, '', ucwords[$string]]];
0 hữu ích 0 bình luận chia sẻ
answer
0
Nếu bạn sử dụng khung công tác Laravel, bạn có thể chỉ sử dụng phương thức camel_case [] .
camel_case['this-is-a-string'] // 'thisIsAString'
0 hữu ích 0 bình luận chia sẻ
answer
0
Đây là một lựa chọn khác:
private function camelcase[$input, $separator = '-']
{
$array = explode[$separator, $input];
$parts = array_map['ucwords', $array];
return implode['', $parts];
}
0 hữu ích 0 bình luận chia sẻ
answer
0
$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace['-', '', ucwords[$stringWithDash, '-']]; echo $camelize;
đầu ra: PendingSellerConf Confirmation
ucwords
tham số thứ hai [tùy chọn] giúp xác định dấu phân cách để camelize chuỗi. str_replace
được sử dụng để hoàn thiện đầu ra
bằng cách loại bỏ dải phân cách.
0 hữu ích 0 bình luận chia sẻ
answer
0
Trong sử dụng Laravel Str::camel[]
use Illuminate\Support\Str;
$converted = Str::camel['foo_bar'];
// fooBar
0 hữu ích 0 bình luận chia sẻ
answer
1
Thử đi:
return preg_replace["/\-[.]/e", "strtoupper['\\1']", $string];
1 hữu ích 2 bình luận chia sẻ
answer
2
Điều này đơn giản hơn:
$string = preg_replace[ '/-[.?]/e',"strtoupper['$1']", strtolower[ $string ] ];
2 hữu ích 1 bình luận chia sẻ