suin.io

PHPで配列の空白要素を一括除去したい

suin2009年3月13日

explode()やsplit()で文字列を配列に分割したとき、空白の要素が混ざってしまうことがあります。

たとえば、「aaa, bbb, ccc」というような文字列をスペースかカンマで分割して配列にする場合、表記のゆれを防止するために、次のようなコードが想定されます。

<?php
$tags = "aaa, bbb, ccc ddd,eee";

$tags = split(' |,', $tags); // スペースでもカンマでも分割する。

?>

取り出したかった配列の要素は5つだけのはずでしたが、空白の要素がノイズとして紛れ込んでしまいます。

array(7) {
  [0]=>
  string(3) "aaa"
  [1]=>
  string(0) ""
  [2]=>
  string(3) "bbb"
  [3]=>

  string(0) ""
  [4]=>
  string(3) "ccc"
  [5]=>
  string(3) "ddd"
  [6]=>
  string(3) "eee"
}

空白を取り除く処理は特に難しくありません。一番単純な発想でいけば、foreachで一通りチェックして、空白ならunset()するという手段を思いつくでしょう。

foreach ( $tags as $k => $v ) if ( empty($v) ) unset($tags[$k]);

これでも十分に、空白を取り除くことができますが、もっとシンプルに書く方法があります。array_filter()を使うやりかたです。この方法だと、一行にすっきり納めることができます。

$tags = array_filter($tags, 'strlen');

さっきのノイズ混じりの配列もこれで、必要な要素だけに絞り込むことができます。

array(5) {
  [0]=>
  string(3) "aaa"
  [2]=>
  string(3) "bbb"
  [4]=>
  string(3) "ccc"
  [5]=>

  string(3) "ddd"
  [6]=>
  string(3) "eee"
}
RELATED POSTS