PHPでもアローラロコンをアーロンにしたい。
つまり、
Pythonのstr型はテキストシーケンス型と呼ばれていて、これにスライスという操作をしてやるといい感じになるのですが、PHPにそんなおしゃれな機能はない。
ではどうするのか。
配列演算を使う方法
<?php
echo implode(array_column(array_chunk(mb_str_split('アローラロコン'), 2), 0));
- 元の文字列
'アローラロコン'
-
mb_str_split($str)
で1文字ごとの要素に分解['ア', 'ロ', 'ー', 'ラ', 'ロ', 'コ', 'ン']
-
array_chunk()
で2要素ごとの塊に分解[['ア', 'ロ'], ['ー', 'ラ'], ['ロ', 'コ'], ['ン']]
-
array_column($array, 0)
でそれぞれの配列の[0]
を抜き出した配列を作る['ア', 'ー', 'ロ', 'ン']
-
implode()
で配列を1個の文字列に結合'アーロン'
- 完成!
動作確認: https://3v4l.org/G8OKf
正規表現を使う方法
<?php
preg_match_all('/(.).?/u', 'アローラロコン', $m);
echo implode($m[1]);
- 元の文字列
'アローラロコン'
-
preg_match_all()
で、2文字単位でマッチさせ、先頭文字をキャプチャする- パターンに
/u
修飾子を使ってUnicodeとして評価することでカナも1文字としてマッチする-
'ア', 'ロ'
'ー', 'ラ'
'ロ', 'コ'
'ン'
それぞれにマッチする
-
-
(.).
と書くことで2文字のペアのうち、先頭だけをキャプチャする-
$m[0]
には['アロ', 'ーラ', 'ロコ', 'ン']
が入っている -
$m[1]
には['ア', 'ー', 'ロ', 'ン']
が入っている
-
- パターンに
-
implode()
で$m[1]
を1個の文字列に結合する'アーロン'
- 完成!
動作確認: https://3v4l.org/7aS79
やりましたね!
まとめ
PHPでもユニコードとテキストシーケンスを言語サポートしているPythonほどではないが、PHPでもアローラロコンをアーロンにできる。
キミの好きな言語でもアローラロコンをアーロンにしてみよう!
追記
PHPでもSymfony Stringを使った解法を別記事に書いた。