Nie są potrzebne żadne wyrażenia regularne ani wywołania zwrotne. Prawie całą pracę można wykonać za pomocą 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');
Jeśli używasz PHP> = 5.3, możesz użyć lcfirst zamiast strtolower.
Aktualizacja
Drugi parametr został dodany do ucwords w PHP 5.4.32 / 5.5.16, co oznacza, że nie musimy najpierw zamieniać myślników na spacje (dzięki Larsowi Ebertowi i PeterM za zwrócenie na to uwagi). Oto zaktualizowany kod:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }
ucwords
faktycznie akceptuje separator jako drugi parametr (patrz odpowiedź PeterM ), więc jedno zstr_replace
wywołań byłoby niepotrzebne.$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
głównie ze względu na czytelność (choć niektórzy mogą się nie zgadzać) i / lub zmniejszenie złożoności kodu.Można to zrobić bardzo prosto, używając ucwords, który akceptuje separator jako parametr:
function camelize($input, $separator = '_') { return str_replace($separator, '', ucwords($input, $separator)); }
UWAGA: Potrzebujesz php co najmniej 5.4.32, 5.5.16
źródło
return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
ucwords
ma drugi parametrdelimiter
, więcstr_replace("_", "", ucwords($input, "_"));
jest wystarczająco dobry (w większości przypadków: Pto moja odmiana tego, jak sobie z tym poradzić. Tutaj mam dwie funkcje, pierwsza camelCase zamienia wszystko w camelCase i nie będzie bałaganu, jeśli zmienna już zawiera cameCase. Drugi uncamelCase zamienia camelCase w podkreślenie (świetna funkcja w przypadku kluczy bazy danych).
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; }
przetestujmy oba:
$camel = camelCase("James_LIKES-camelCase"); $uncamel = uncamelCase($camel); echo $camel." ".$uncamel;
źródło
Przeciążona jedna linijka, z blokiem dokumentów ...
/** * 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)))); }
źródło
null
return
... zaktualizowana, dzięki. Oto link do przetestowania tego 3v4l.org/YBHPdPrawdopodobnie użyłbym
preg_replace_callback()
tak:function dashesToCamelCase($string, $capitalizeFirstCharacter = false) { return preg_replace_callback("/-[a-zA-Z]/", 'removeDashAndCapitalize', $string); } function removeDashAndCapitalize($matches) { return strtoupper($matches[0][1]); }
źródło
Szukasz preg_replace_callback , możesz go użyć w ten sposób:
$camelCase = preg_replace_callback('/-(.?)/', function($matches) { return ucfirst($matches[1]); }, $dashes);
źródło
function camelize($input, $separator = '_') { return lcfirst(str_replace($separator, '', ucwords($input, $separator))); } echo ($this->camelize('someWeir-d-string')); // output: 'someWeirdString';
źródło
$string = explode( "-", $string ); $first = true; foreach( $string as &$v ) { if( $first ) { $first = false; continue; } $v = ucfirst( $v ); } return implode( "", $string );
Niesprawdzony kod. Sprawdź w dokumentacji PHP funkcje im- / explode i ucfirst.
źródło
Jedna linijka, PHP> = 5.3:
$camelCase = lcfirst(join(array_map('ucfirst', explode('-', $url))));
źródło
tutaj jest bardzo proste rozwiązanie w kodzie jednowierszowym
$string='this-is-a-string' ; echo str_replace('-', '', ucwords($string, "-"));
wyjście ThisIsAString
źródło
Alternatywnie, jeśli wolisz nie zajmować się wyrażeniami regularnymi i chcesz uniknąć jawnych pętli:
// $key = 'some-text', after transformation someText $key = lcfirst(implode('', array_map(function ($key) { return ucfirst($key); }, explode('-', $key))));
źródło
Kolejne proste podejście:
$nasty = [' ', '-', '"', "'"]; // array of nasty characted to be removed $cameled = lcfirst(str_replace($nasty, '', ucwords($string)));
źródło
Biblioteka TurboCommons zawiera metodę formatCase () ogólnego przeznaczenia w klasie StringUtils, która umożliwia konwersję ciągu znaków na wiele popularnych formatów liter, takich jak CamelCase, UpperCamelCase, LowerCamelCase, snake_case, Title Case i wiele innych.
https://github.com/edertone/TurboCommons
Aby z niego skorzystać, zaimportuj plik phar do swojego projektu i:
use org\turbocommons\src\main\php\utils\StringUtils; echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE); // will output 'sNakeCase'
Oto link do kodu źródłowego metody:
https://github.com/edertone/TurboCommons/blob/b2e015cf89c8dbe372a5f5515e7d9763f45eba76/TurboCommons-Php/src/main/php/utils/StringUtils.php#L653
źródło
Spróbuj tego:
$var='snake_case'; echo ucword($var,'_');
Wynik:
źródło
W Laravel użyj
Str::camel()
use Illuminate\Support\Str; $converted = Str::camel('foo_bar'); // fooBar
źródło
function camelCase($text) { return array_reduce( explode('-', strtolower($text)), function ($carry, $value) { $carry .= ucfirst($value); return $carry; }, ''); }
Oczywiście, jeśli inny separator niż '-', np. '_', Również ma być dopasowany, to nie zadziała, wtedy preg_replace może najpierw zamienić wszystkie (kolejne) separatory na '-' w $ text ...
źródło
Ta funkcja jest podobna do funkcji @ 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); }
Ale jaśniej (myślę: D) i z opcjonalnym parametrem, aby pierwsza litera była wielka lub nie.
Stosowanie:
$dashes = 'function-test-camel-case'; $ex1 = toCamelCase($dashes); $ex2 = toCamelCase($dashes, true); var_dump($ex1); //string(21) "functionTestCamelCase" var_dump($ex2); //string(21) "FunctionTestCamelCase"
źródło
Jeśli używasz frameworka Laravel, możesz użyć po prostu metody camel_case () .
camel_case('this-is-a-string') // 'thisIsAString'
źródło
Oto inna opcja:
private function camelcase($input, $separator = '-') { $array = explode($separator, $input); $parts = array_map('ucwords', $array); return implode('', $parts); }
źródło
$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace('-', '', ucwords($stringWithDash, '-')); echo $camelize;
dane wyjściowe: PendingSellerConfirmationucwords
drugi (opcjonalny) parametr pomaga w identyfikacji separatora do kamelizacji łańcucha.str_replace
służy do sfinalizowania wydruku poprzez usunięcie separatora.źródło
Oto mała funkcja pomocnicza wykorzystująca podejście funkcjonalne array_reduce . Wymaga co najmniej PHP 7.0
private function toCamelCase(string $stringToTransform, string $delimiter = '_'): string { return array_reduce( explode($delimiter, $stringToTransform), function ($carry, string $part): string { return $carry === null ? $part: $carry . ucfirst($part); } ); }
źródło
Wiele dobrych rozwiązań powyżej i mogę podać inny sposób, o którym nikt wcześniej nie wspominał. W tym przykładzie użyto array. Używam tej metody w moim projekcie Shieldon Firewall .
/** * Covert string with dashes into camel-case string. * * @param string $string A string with dashes. * * @return string */ function getCamelCase(string $string = '') { $str = explode('-', $string); $str = implode('', array_map(function($word) { return ucwords($word); }, $str)); return $str; }
Sprawdź to:
echo getCamelCase('This-is-example');
Wynik:
źródło
Spróbuj tego:
return preg_replace("/\-(.)/e", "strtoupper('\\1')", $string);
źródło
e
wycofaniu modyfikatoraTo jest prostsze:
$string = preg_replace( '/-(.?)/e',"strtoupper('$1')", strtolower( $string ) );
źródło