LoginSignup
15
4

More than 1 year has passed since last update.

PHPでアローラロコンをアーロンにする

Last updated at Posted at 2022-07-27

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を使った解法を別記事に書いた。

15
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
4