にゃあ

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

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"
}

コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/133

コメントを書く

お名前* URL
本文*
合い言葉* ←「tiavetlenco」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

とおりすがり(2010.10.21) #
array_filter知りませんでした!!
こんなにすっきり書けるなんて・・・・

参考になりました!
ありがとうございます。
suin(2010.10.22) #
別の書き方として、array_diff($tags, array(''));でも同じことができるはずです。
のりお(2011.07.27) #
array_filterとstrlenで簡単に空の値を削除できるのは勉強になりました。
suinさんの方法もいいですね!
2つ勉強になりました。
ありがとうございます。

Author

Submenu

Recent Entries

XOOPS Cube Dev Ring

氷川 XOOPS Module 開発室

Recent Comments

Recent Trackbacks

facebookいいね