Конвертировать перебежками до верблюжьего в PHP
может кто-нибудь помочь мне завершить эту функцию PHP? Я хочу взять такую строку: 'this-is-a-string' и преобразовать ее в эту: 'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
20 ответов:
нет необходимости в регулярных выражениях или обратных вызовах. Почти вся работа может быть выполнена с помощью 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');Если вы используете PHP >= 5.3, вы можете использовать lcfirst вместо strtolower.
обновление
второй параметр был добавлен в ucwords в PHP 5.4.32 / 5.5.16, что означает, что нам не нужно сначала менять тире на пробелы (спасибо Ларсу Эберту и Питерму за указание на это). Вот обновленный код:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) { $str = str_replace('-', '', ucwords($string, '-')); if (!$capitalizeFirstCharacter) { $str = lcfirst($str); } return $str; } echo dashesToCamelCase('this-is-a-string');
Это можно сделать очень просто, с помощью ucwords который принимает разделитель как param:
function camelize($input, $separator = '_') { return str_replace($separator, '', ucwords($input, $separator)); }Примечание: нужен php хотя бы 5.4.32, 5.5.16
Я бы, вероятно, использовать
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]); }
Это мой вариант того, как с этим бороться. Вот у меня есть две функции, первая 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;
вы ищете preg_replace_callback, вы можете использовать его как это :
$camelCase = preg_replace_callback('/-(.?)/', function($matches) { return ucfirst($matches[1]); }, $dashes);
$string = explode( "-", $string ); $first = true; foreach( $string as &$v ) { if( $first ) { $first = false; continue; } $v = ucfirst( $v ); } return implode( "", $string );неиспытанный код. Проверьте документы PHP для функций im - / explode и ucfirst.
перегруженный однострочный, с блоком doc...
/** * 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)))); }
альтернативно, если вы предпочитаете не иметь дело с регулярным выражением, и хотите избежать явно петли:
// $key = 'some-text', after transformation someText $key = lcfirst(implode('', array_map(function ($key) { return ucfirst($key); }, explode('-', $key))));
вот очень простое решение в одной строке кода
$string='this-is-a-string' ; echo str_replace('-', '', ucwords($string, "-"));выход вот это да!--2-->
библиотека TurboCommons содержит метод formatCase () общего назначения внутри класса StringUtils, который позволяет конвертировать строку во множество распространенных форматов case, таких как 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'вот ссылка на источник способ код:
function camelize($input, $separator = '_') { return lcfirst(str_replace($separator, '', ucwords($input, $separator))); } echo ($this->camelize('someWeir-d-string')); // output: 'someWeirdString';
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"
еще один простой подход:
$nasty = [' ', '-', '"', "'"]; // array of nasty characted to be removed $cameled = lcfirst(str_replace($nasty, '', ucwords($string)));
Если вы используете Laravel framework, вы можете использовать только 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); }
$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace('-', '', ucwords($stringWithDash, '-')); echo $camelize;вывод: PendingSellerConfirmation
ucwordsвторой (необязательный) параметр помогает определить разделитель для камелизации строки.str_replaceиспользуется для завершения вывода путем удаления разделителя.
Comments