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
Dávid Horváth – Add a prefix to each item of a PHP arrayforeach
.
こういった関数はforeach
などのループより遅い印象がありましたが、そんなことはないんですね。
また、foreach
はunset
を使わないといけないシーンがあったり、ただのループというのはイマイチ何をしているか分かりにくいので、array_*
系の PHP 関数を使っていきたいところです。