【PHP】配列の文字列の最初もしくは最後に、接頭辞/接尾辞を追加する方法(preg_filter)

  • PHP

PHP の文字列の配列に、それぞれ特定の接頭辞や接尾辞を追加する方法です。preg_filterを使うと、foreachなどのループを使わずに追加できます。

接頭辞(prefix)を追加する

それぞれの文字列の最初に「あいさつは、」を追加してみます。追加するときはpreg_filterを使用します。

$string_array = [
  'おはよう',
  'こんにちは',
  'こんばんは',
];
$prefix = 'あいさつは、';
$prefixed_array = preg_filter('/^/', $prefix, $string_array);
  • preg_filter() … 第三引数の配列($string_array)を1つずつ回し、第一引数(/^/)にマッチした文字列を第二引数($prefix)で置換する

ここでは正規表現を使って/^/としているので、「文字列の最初をあいさつは、に置換する」となり、それぞれの文字列の最初にあいさつは、が追加される形になります。

$prefixed_arrayを展開してみると、接頭辞が追加されています。

array(3) {
  [0]=>
  string(30) "あいさつは、おはよう"
  [1]=>
  string(33) "あいさつは、こんにちは"
  [2]=>
  string(33) "あいさつは、こんばんは"
}

接尾辞(suffix)を追加する

やり方は prefix とほぼ同じ、正規表現を書き換えるだけです。それぞれの文字列の最後に「」を追加してみます

$string_array = [
  'おはよう',
  'こんにちは',
  'こんばんは',
];
$suffix = '!!';
$suffixed_array = preg_filter('/$/', $suffix, $string_array);

ここでは正規表現を使って/$/としているので、「文字列の最後」に!!が追加される形になっています。

$suffixed_arrayを展開してみると、接尾辞が追加されています。

array(3) {
  [0]=>
  string(15) "おはよう!!"
  [1]=>
  string(18) "こんにちは!!"
  [2]=>
  string(18) "こんばんは!!"
}

参考

Stack Overflow にあった Add a prefix to each item of a PHP array を参考(というか丸写し…)にしましたが、この方法はforeachの3倍早いらしい?です。

Additionally, this is more than three times faster than a foreach.

Dávid HorváthAdd a prefix to each item of a PHP array

こういった関数はforeachなどのループより遅い印象がありましたが、そんなことはないんですね。

また、foreachunsetを使わないといけないシーンがあったり、ただのループというのはイマイチ何をしているか分かりにくいので、array_*系の PHP 関数を使っていきたいところです。