Sem regex ou callbacks necessários. Quase todo o trabalho pode ser feito com 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');
Se estiver usando PHP> = 5.3, você pode usar lcfirst em vez de strtolower.
Atualizar
Um segundo parâmetro foi adicionado ao ucwords no PHP 5.4.32 / 5.5.16 o que significa que não precisamos primeiro mudar os travessões para espaços (graças a Lars Ebert e PeterM por apontar isso). Aqui está o código atualizado:
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
na verdade aceita um delimitador como segundo parâmetro (veja a resposta de PeterM ), então uma dasstr_replace
chamadas seria desnecessária.$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
principalmente para facilitar a leitura (embora alguns possam discordar) e / ou reduzir a complexidade do código.Isso pode ser feito de forma muito simples, usando ucwords que aceita delimitador como parâmetro:
NOTA: É necessário php pelo menos 5.4.32, 5.5.16
fonte
return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
ucwords
tem um segundo parâmetrodelimiter
, entãostr_replace("_", "", ucwords($input, "_"));
é bom o suficiente (na maioria dos casosesta é minha variação de como lidar com isso. Aqui eu tenho duas funções, a primeira camelCase transforma qualquer coisa em camelCase e não bagunçará se a variável já contiver cameCase. O segundo uncamelCase transforma camelCase em sublinhado (ótimo recurso ao lidar com chaves de banco de dados).
vamos testar ambos:
fonte
One-liner sobrecarregado, com bloco doc ...
fonte
null
return
... atualizado, obrigado. Aqui está um link para testar este 3v4l.org/YBHPdEu provavelmente usaria
preg_replace_callback()
, assim:fonte
Você está procurando preg_replace_callback , você pode usá-lo assim:
fonte
fonte
Código não testado. Verifique os documentos do PHP para as funções im- / explode e ucfirst.
fonte
Um liner, PHP> = 5.3:
fonte
aqui está uma solução muito fácil em um código de linha
output ThisIsAString
fonte
Como alternativa, se você preferir não lidar com regex e quiser evitar loops explícitos :
fonte
Outra abordagem simples:
fonte
A biblioteca TurboCommons contém um método formatCase () de propósito geral dentro da classe StringUtils, que permite converter uma string em vários formatos de caso comuns, como CamelCase, UpperCamelCase, LowerCamelCase, snake_case, Title Case e muitos mais.
https://github.com/edertone/TurboCommons
Para usá-lo, importe o arquivo phar para o seu projeto e:
Este é o link para o código-fonte do método:
https://github.com/edertone/TurboCommons/blob/b2e015cf89c8dbe372a5f5515e7d9763f45eba76/TurboCommons-Php/src/main/php/utils/StringUtils.php#L653
fonte
Experimente isto:
Resultado:
fonte
No uso do Laravel
Str::camel()
fonte
Obviamente, se outro delimitador diferente de '-', por exemplo, '_', deve ser correspondido também, então isso não funcionará, então um preg_replace poderia converter todos os delimitadores (consecutivos) para '-' em $ text primeiro ...
fonte
Esta função é semelhante à função @Svens
Mas mais claro, (eu acho: D) e com o parâmetro opcional para colocar a primeira letra em maiúscula ou não.
Uso:
fonte
Se você usa o framework Laravel, você pode usar apenas o método camel_case () .
fonte
Aqui está outra opção:
fonte
$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace('-', '', ucwords($stringWithDash, '-')); echo $camelize;
saída: PendingSellerConfirmationucwords
O segundo parâmetro (opcional) ajuda a identificar um separador para camelizar a string.str_replace
é usado para finalizar a saída removendo o separador.fonte
Aqui está uma pequena função auxiliar usando uma abordagem funcional array_reduce . Requer pelo menos PHP 7.0
fonte
Muitas boas soluções acima, e posso fornecer uma maneira diferente que ninguém mencionou antes. Este exemplo usa array. Eu uso esse método no meu projeto Shieldon Firewall .
Teste-o:
Resultado:
fonte
Experimente isto:
fonte
e
Isso é mais simples:
fonte