誰かがこのPHP関数の完成を手伝ってくれる?次のような文字列を取得したい: 'this-is-a-string'に変換します: 'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
回答:
正規表現やコールバックは必要ありません。ほとんどすべての作業は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を使用している場合は、strtolowerの代わりにlcfirstを使用できます。
PHP 5.4.32 / 5.5.16のucwordsに2番目のパラメーターが追加されました。これは、最初にダッシュをスペースに変更する必要がないことを意味します(これを指摘してくれたLars EbertとPeterMに感謝します)。更新されたコードは次のとおりです。
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
主に読みやすさ(一部は異なる場合があります)やコードの複雑さを軽減するために、3項演算子を使用して書き換えることができます。
これは私の対処方法のバリエーションです。ここには2つの関数があります。最初の1つはcamelCaseが何かをcamelCaseに変換します。変数にすでにcameCaseが含まれていても問題はありません。2番目の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;
オーバーロードされたワンライナー、ドキュメントブロック付き...
/**
* 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))));
}
null
return
...更新、ありがとう。ここでは、このテストするためのリンクです3v4l.org/YBHPd
私はおそらく次のように使用します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]);
}
preg_replace_callbackを探していますが、次のように使用できます。
$camelCase = preg_replace_callback('/-(.?)/', function($matches) {
return ucfirst($matches[1]);
}, $dashes);
function camelize($input, $separator = '_')
{
return lcfirst(str_replace($separator, '', ucwords($input, $separator)));
}
echo ($this->camelize('someWeir-d-string'));
// output: 'someWeirdString';
または、正規表現を使用せず、明示的なループを避けたい場合:
// $key = 'some-text', after transformation someText
$key = lcfirst(implode('', array_map(function ($key) {
return ucfirst($key);
}, explode('-', $key))));
TurboCommonsライブラリには、StringUtilsクラス内に汎用のformatCase()メソッドが含まれています。これにより、文字列を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'
メソッドのソースコードへのリンクは次のとおりです。
Laravelでの使用 Str::camel()
use Illuminate\Support\Str;
$converted = Str::camel('foo_bar');
// fooBar
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"
Laravelフレームワークを使用する場合は、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);
}
以下は、機能的なarray_reduceアプローチを使用した小さなヘルパー関数です。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);
}
);
}
上記の多くの優れたソリューションと、これまで誰も言及しなかった別の方法を提供できます。この例では配列を使用しています。私はプロジェクト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;
}
試して:
echo getCamelCase('This-is-example');
結果:
ThisIsExample
これを試して:
return preg_replace("/\-(.)/e", "strtoupper('\\1')", $string);
これはより簡単です:
$string = preg_replace( '/-(.?)/e',"strtoupper('$1')", strtolower( $string ) );
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }