-
ID:pHJ934 さんの質問

PHPで、ある文字(英字)に対し、「-」をスペースに置き換え直後の文字を大文字にするにはどうしたらいいですか?
例:aaa-bbb-ccc → aaa Bbb Ccc

みんなの回答 4 件

ID:pHJ934 さんの回答

一応こんな感じで出来ましたが、もっといいものありませんか?

$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;

ID:xxJLT7 さんの回答

preg_replace使う。
google検索|つ【正規表現で大文字や小文字に置換する Qiita】

PHP: preg_replace - Manual

http://php.net/manual/ja/function.preg-replace.php
ID:pHJ934

ありがとうございます。だいぶ短くなりました。
第一引数で’/-[a-z]{1}’を指定して、「スペース」+ 「2文字目を大文字」とする方法は分からなかったですが、以下の方がシンプルになりますかね。
(削除&修正しました)

$text = ’aaa-bbb-ccc’;
$result = preg_replace(’/-/’,’ ’,$title);
$result = ucwords($result);
echo $result;

ID:xxJLT7

もちろんucwordsでもいいし。
勉強がてら正規表現を工夫してもいいし。
二回preg_replaceするのでもいい。
1回目はハイフンの後の文字を大文字にする。2回目はハイフンをスペースに置き換える。と正規表現で処理すれば出来る。結局同じことだけどさ。

ID:OZlGai さんの回答

正規表現使ったほうがスマートだと思うけど、アナログな感じだとこれでどう?
一応、行数的には半分くらいに圧縮できたんじゃないかな。
ただ、正規表現ならたぶん、二行でいけるはず。

$str = "aaa-bbb-ccc";
$array = explode("-",$str);
$new_str = "";
foreach($array as $key => $val){
$new_str .= ($key != 0) ? " " . ucfirst($val) : $val;
}

ID:pHJ934

ありがとうございます。
ほんとは最後に最初の文字も大文字すればいいやと思っていたのですが、そうなるとforeachのところはもっと簡単になりますかね。
$new_str .= " " . ucfirst($val);

ID:OZlGai

それなら、1行で書けるね。
$str = "aaa-bbb-ccc";
$new_str = implode(" ",array_map(ucfirst,explode("-",$str)));

ID:8PbKD0 さんの回答

こんな感じのできました。

-----------------
<?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
最終更新日:2015-06-16 (2,536 views)

関連するトピックス

ページ上部に戻る