英文字には大文字と小文字がある。
英大文字⇔英小文字の相互変換ならstrtoupper(), strtolower()関数を使う。
●すべて英小文字変換なら
●すべて英大文字変換なら
一方、アッパーキャメルケースっぽく先頭のみを英大文字にキャピタライズする場合は、先頭1文字と2文字目以降を分割して処理する必要がある。
●先頭のみを英大文字に
部分文字列を抜き出すならsubstr()関数の出番ということで
●別のやり方で先頭のみを英大文字に(その1)
PHPでは特別にスカラーを配列的に参照することで部分文字にアクセスできるのでこれを使えば
※ $word[0]を$word{0}としても同様
●別のやり方で先頭のみを英大文字に(その2)
PHPでは頭文字だけを大文字変換する専用のucfirst()関数が用意されているのでこれを使うともっとコンパクトに書ける。
ucfirst()関数は頭文字は変換するものの、以降の文字は元のままなので一旦strtolower()で全体を英小文字にする必要がある。
●番外
strtoupper()やucfirst()関数が内部でどんなことやってるかというと、ターゲットの文字コードが英小文字の範囲だったら小文字コードと大文字コードの差分をターゲットの文字コードから差し引いた数値を文字に直すといった感じでしょうか。
英小文字[a-z]は文字コード{0x61-0x7A}
英大文字[A-Z]は文字コード{0x41-0x5A}
の範囲に割り当てられているので
(a文字コード - A文字コード)で差分を出しても
(z文字コード - Z文字コード)としても同様の数値となる。
英大文字⇔英小文字の相互変換ならstrtoupper(), strtolower()関数を使う。
●すべて英小文字変換なら
<?php $word = 'string'; $lowercase = strtolower($word); // "string"
●すべて英大文字変換なら
<?php $word = 'string'; $uppercase = strtoupper($word); // "STRING"
一方、アッパーキャメルケースっぽく先頭のみを英大文字にキャピタライズする場合は、先頭1文字と2文字目以降を分割して処理する必要がある。
●先頭のみを英大文字に
部分文字列を抜き出すならsubstr()関数の出番ということで
<?php $word = 'string'; $Result = strtoupper(substr($word, 0, 1)) . strtolower(substr($word, 1)); // "String"
●別のやり方で先頭のみを英大文字に(その1)
PHPでは特別にスカラーを配列的に参照することで部分文字にアクセスできるのでこれを使えば
<?php $word = 'string'; $Result = strtoupper($word[0]) . strtolower(substr($word, 1)); // "String"
●別のやり方で先頭のみを英大文字に(その2)
PHPでは頭文字だけを大文字変換する専用のucfirst()関数が用意されているのでこれを使うともっとコンパクトに書ける。
<?php $word = 'string'; $Result = ucfirst(strtolower($word)); // "String"
●番外
strtoupper()やucfirst()関数が内部でどんなことやってるかというと、ターゲットの文字コードが英小文字の範囲だったら小文字コードと大文字コードの差分をターゲットの文字コードから差し引いた数値を文字に直すといった感じでしょうか。
英小文字[a-z]は文字コード{0x61-0x7A}
英大文字[A-Z]は文字コード{0x41-0x5A}
の範囲に割り当てられているので
(a文字コード - A文字コード)で差分を出しても
(z文字コード - Z文字コード)としても同様の数値となる。
<?php $word = 'string'; //差分は $n = 0x61 - 0x41; //この差分を条件を満たすターゲットの文字コードから差し引くので if (0x61 <= ord($word[0]) && ord($word[0]) >= 0x7A ) { $word[0] = chr(ord($word[0]) - $n); }