フィルタリングは『ろ過』のことで『データを1回通して見る』『データを選別する』こと。ある条件で排除することが多いですね?
PHPもフィルタリングができます。array_filter()です。
array_filter()の使い方をサンプルプログラムで分かりやすく説明します。
フィルタリングとは?
Webではよく『フィルタリング』という言葉を聞きますよね?
URLフィルタリング
IPフィルタリング
etc...
これらは、転送データを監視してある条件のものを排除します。
フィルタリングは直訳すると『ろ過』で、そのままでは『1回データを通して見る』なんですが、そこからデータを選別する・分類するという大きな意味になり、どちらかといえば特定のデータを消す・排除することが多いです。
『データを通して見る』から『監視』の意味で使うこともあります。
コールバック関数とはなにか?
コールバック関数は、
関数の引数で渡す関数
のこと。
ここでは無名関数を使ってます。
無名関数は名前がない関数で、変数に入れられる関数のこと。
関数は、
この処理をして結果をちょうだい。
と処理を任せてしまうことですが、コールバック関数は、
この関数を使って処理してよ。最終結果だけちょうだい。
と関数(コールバック)は指定しますが、処理の実行と結果の使い道はコールバック関数を引き受けた関数が行ないます。
PHPのフィルタリングでは、
削除するデータの条件を決める
仕事をコールバック関数がします。
コールバック関数はフィルタリングのルールを書く。
array_filter()のコールバック関数は、boolean(true, false)を返さないといけません。
戻り値 | データはどうなる? |
---|---|
false | 削除 |
true | 残す |
フィルタリングしてみよう!
いろんなフィルタリングをしてみましょう。
基本的なことだけ行ないます。あとは応用していろいろ試してみてください。
偶数・奇数
偶数をはじくフィルタリング、奇数をはじくフィルタリングをします。
サンプルコードです。
いろいろな計算式をコールバック関数に入れれば、計算結果でフィルタリングできます。
文字列をフィルタリングする
'abc'が含まれる文字列をフィルタリングするサンプルです。
'abc'が含むものを抽出・削除してみましょう。
正規表現を使った文字列検索をすればいろんなことができそうですね?
空要素を削除する
array_filterには、空要素の削除が用意されています。
コールバックなしで実行
します。
削除の条件は、empty()と同じ。
この処理は完ぺきではないので注意が必要です。
'0'
0
が消えます。また、コールバック関数にstrlen()を使う方法をよく見ますがこれも問題があります。
このあたりはまとめたのでそちらを見て下さい。
クラスをフィルタリングする
特定のクラスを抽出・削除します。
サンプルのように親クラスを指定して、子クラスもろともフィルタリングできます。
もちろん子クラスだけもできます。くわしくは公式ドキュメントを見てください。
連想配列のフィルタリング
ここまでのフィルタリングは、連想配列をパラメータにわたしても同じ結果になります。
こんどは、連想配列のキーを使う方法をご紹介します。
array_filter()の第3パラメータ(flag)を指定するだけです。
flag | callbackの引数 |
---|---|
ARRAY_FILTER_USE_KEY | キーだけ |
ARRAY_FILTER_USE_BOTH | キー,値 |
なし | 値だけ |
コールバックのパラメータの順番は決まっています。
(値, キー)
まちがえないようにしましょう。
まとめ
array_filter()は、コールバックに計算式や文字列検索、正規表現を使うとたくさんのフィルタリングができます。
ただし、問題点もあります。
空要素削除が危ない。
多次元配列に対応できない。
このへんに注意しながら使わないといけません。