PHPで配列を扱っているとき、値の無い空白の要素を削除したい場面はありませんか?
そんなときは array_filter() を使うと便利です。
array_filter()は「空の要素を削除する関数」ではなく、「配列をフィルタリングして特定の要素を抜き出す関数」です。
なので今回の趣旨を超えているのですが、今回は空の要素を削除する方法をご紹介します。
PHPの配列で空白の要素を削除するarray_filterの使い方
1 2 3 |
$ary1 = array("東京", "", "大阪", null, false, "沖縄", 0); $ary2 = array_filter($ary1); print_r($ary2); |
これを単純にarray_filter()の引数にセットして、戻り値を出力してみましょう。
1 2 3 4 5 6 |
Array ( [0] => 東京 [2] => 大阪 [5] => 沖縄 ) |
結果は地名が入力された要素だけ残りました。
インデックスは元々のままのようです。
インデックスを詰めたい場合は、次の記事を参考にしてください。
≫ PHPの配列の特定要素を削除するunset()を使う場合の注意点
そして、0やfalseといった値も全て削除されるようですね。
if文で判定したときにfalseになるものは全て削除され、trueのものだけが残るんですね。
次のコードと同じ処理をするイメージです。
1 2 3 4 5 6 7 |
$ary1 = array("東京", "", "大阪", null, false, "沖縄", 0); foreach ($ary1 as $k => $v) { if ($v) { $ary2[$k] = $v; } } print_r($ary2); |
0やfalseも含めて削除したい場合は、単純に引数に配列をセットするだけでよさそうです。
「0やfalseは残したい」って方は foreach を使ったサンプルコードのif文の条件を空文字とnullにする方法でもできます(笑)
それだとnullだけ削除したり、0だけ削除したりできます。
ぶっちゃけ僕は想定通りに動けばOK派なのでそれでもいいですが、せっかくなのでarray_filter()を使った方法を次に説明します。
nullと空文字だけを削除する方法
まずnullだけを削除する方法です。
1 2 3 4 5 6 7 8 |
$ary1 = array("東京", "", "大阪", null, false, "沖縄", 0); $ary2 = array_filter($ary1, 'myFilter'); var_dump($ary2); function myFilter($val) { return !is_null($val); } |
array_filter()の第2引数にフィルターとなる関数名を書きます。
そして、指定したフィルターは普通に関数を作成して定義しておきます。
作成した関数の引数には配列の値が1つずつ渡されます。
戻り値はboolean型で削除したいものが false になるように定義します。
配列の値が false のものが消えちゃうのでvar_dump()で出力します。
結果は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
array(6) { [0]=> string(6) "東京" [1]=> string(0) "" [2]=> string(6) "大阪" [4]=> bool(false) [5]=> string(6) "沖縄" [6]=> int(0) } |
nullの要素だけが削除されました!
nullだけじゃなく、空文字も削除したい場合は次のように書きます。
1 2 3 4 5 6 7 8 |
$ary1 = array("東京", "", "大阪", null, false, "沖縄", 0); $ary2 = array_filter($ary1, 'myFilter'); var_dump($ary2); function myFilter($val) { return !(is_null($val) || $val === ""); } |
結果は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 |
array(5) { [0]=> string(6) "東京" [2]=> string(6) "大阪" [4]=> bool(false) [5]=> string(6) "沖縄" [6]=> int(0) } |
これでnullと空文字が削除できます。
まとめ
参考になりましたでしょうか?
プログラマーとして初心者のarray_filter()を知らない頃はforeachを使って判定しながら新しい配列を作成してもいいと思います。
array_filter()を知ったらこれを使いましょう!
コードがすっきりしますし、PHPで用意されている関数なので他人がコードを見たときに一発で何をやっているか理解してくれます。
コメントを残す