PHPで文字列を区切り文字で配列に変換する際に使うのがexplode関数。

まれに受け取った入力文字列の中に不要なスペースが入っている場合がある。

例えば以下のような例だ。

hoge,fuga, piyo

この文字列に対しexplode関数を実行すると、出来上がった配列は以下のようになり、piyoの前に空白文字が入ってしまう。

<?php
$str = 'hoge,fuga, piyo';
$arr = explode(',', $str);
var_dump($arr);

// 以下出力結果
array(3) {
  [0]=>
  string(4) "hoge"
  [1]=>
  string(4) "fuga"
  [2]=>
  string(5) " piyo"
}

出来上がった配列に対し、空白を除去するtrim関数をループで回して実行する方法もあるのだが面倒なので、今回はarray_map関数を使ってexplodeとtrimを同時におこなう方法を紹介する。

array_map関数

array_map関数は、第二引数以降で与える配列の各要素に対し、第一引数に指定したコールバック関数を適用するものだ。

今回の例をもとに具体的な使い方を見ていこう。

<?php
$str = 'hoge,fuga, piyo';

$arr = array_map('trim', explode(',', $str));

var_dump($arr);

array_map関数の第二引数にexplode関数で生成した配列を指定している。

この配列の各要素、つまり「hoge」「fuga」「 piyo」に対し、第一引数で指定したtrim関数を実行してくれるというわけだ。

結果を見ると、piyoの前にあった半角スペースがなくなっている事が分かる。

array(3) {
  [0]=>
  string(4) "hoge"
  [1]=>
  string(4) "fuga"
  [2]=>
  string(4) "piyo"
}