PHPで、ある文字(英字)に対し、「-」をスペースに置き換え直後の文字を大文字にするにはどうしたらいいですか?例:aaa-bbb-ccc → aaa Bbb Ccc
一応こんな感じで出来ましたが、もっといいものありませんか?
$text = ’aaa-bbb-ccc’;$text_arr = str_split($text);$hi_chk = false;$result = ’’;foreach($text_arr as $str): if($hi_chk): $str = ucfirst($str); $hi_chk = false; elseif($str == ’-’) : $str = ’ ’; $hi_chk = true; endif; $result .= $str;endforeach;echo result;
preg_replace使う。google検索|つ【正規表現で大文字や小文字に置換する Qiita】
ありがとうございます。だいぶ短くなりました。第一引数で’/-[a-z]{1}’を指定して、「スペース」+ 「2文字目を大文字」とする方法は分からなかったですが、以下の方がシンプルになりますかね。(削除&修正しました)
$text = ’aaa-bbb-ccc’;$result = preg_replace(’/-/’,’ ’,$title);$result = ucwords($result);echo $result;
もちろんucwordsでもいいし。勉強がてら正規表現を工夫してもいいし。二回preg_replaceするのでもいい。1回目はハイフンの後の文字を大文字にする。2回目はハイフンをスペースに置き換える。と正規表現で処理すれば出来る。結局同じことだけどさ。
正規表現使ったほうがスマートだと思うけど、アナログな感じだとこれでどう?一応、行数的には半分くらいに圧縮できたんじゃないかな。ただ、正規表現ならたぶん、二行でいけるはず。
$str = "aaa-bbb-ccc";$array = explode("-",$str);$new_str = "";foreach($array as $key => $val){ $new_str .= ($key != 0) ? " " . ucfirst($val) : $val;}
ありがとうございます。ほんとは最後に最初の文字も大文字すればいいやと思っていたのですが、そうなるとforeachのところはもっと簡単になりますかね。$new_str .= " " . ucfirst($val);
それなら、1行で書けるね。$str = "aaa-bbb-ccc";$new_str = implode(" ",array_map(ucfirst,explode("-",$str)));
こんな感じのできました。
-----------------<?php$str ="aaa-bbb-ccc";function replace_cb($matches){return ucwords( str_replace( ’-’, ’ ’, $matches[0] ) );}echo preg_replace_callback( ’/(-[a-z]{1})/’, ’replace_cb’, $str );
みんなの回答 4 件
一応こんな感じで出来ましたが、もっといいものありませんか?
$text = ’aaa-bbb-ccc’;
$text_arr = str_split($text);
$hi_chk = false;
$result = ’’;
foreach($text_arr as $str):
if($hi_chk):
$str = ucfirst($str);
$hi_chk = false;
elseif($str == ’-’) :
$str = ’ ’;
$hi_chk = true;
endif;
$result .= $str;
endforeach;
echo result;
preg_replace使う。
google検索|つ【正規表現で大文字や小文字に置換する Qiita】
PHP: preg_replace - Manual
http://php.net/manual/ja/function.preg-replace.php正規表現使ったほうがスマートだと思うけど、アナログな感じだとこれでどう?
一応、行数的には半分くらいに圧縮できたんじゃないかな。
ただ、正規表現ならたぶん、二行でいけるはず。
$str = "aaa-bbb-ccc";
$array = explode("-",$str);
$new_str = "";
foreach($array as $key => $val){
$new_str .= ($key != 0) ? " " . ucfirst($val) : $val;
}
こんな感じのできました。
-----------------
<?php
$str ="aaa-bbb-ccc";
function replace_cb($matches)
{
return ucwords( str_replace( ’-’, ’ ’, $matches[0] ) );
}
echo preg_replace_callback( ’/(-[a-z]{1})/’, ’replace_cb’, $str );
Web-based online coding environment | paiza.IO
https://paiza.io/projects/bnGEcUrLcEReCs9svtur2A関連するトピックス