
PHP|array_filter()とstrlen()で配列から空の要素を一括で削除(排除)する。
作成したり、取得した配列を調査し、要素が空白の場合はキーごと削除する方法。
以下の様な配列があるとします。
1 2 3 4 5 6 7 8 9 10 11 | $arr = array( 'America' => 'ok', 'Belgium' => 1, 'China' => 0, 'Denmark' => '', // 空白 'England' => ' ', // 半角スペース 'France' => " ", // 半角スペース 'Guatemala' => false, 'Hong Kong' => true, 'Italy' => null, ); |
Denmark がいわゆる空要素。その他に、NULL、FALSE、1、半角スペースだったりがあります。
この空要素を配列から排除したい場合、どうすれば良いでしょうか。
foreachでグリグリ回す方法がまず、思い浮かびます。
1 2 3 4 5 | foreach ( $arr AS $k => $v ) { if ( empty($v) ) { unset($arr[$k]); } } |
結果は以下。
1 2 3 4 5 6 7 8 | $arr = Array ( [America] => ok [Belgium] => 1 [England] => [France] => [Hong Kong] => 1 ) |
判定の書き方にもよりますが、今回の書き方だと、0、空白、FALSE、NULL が削られてしまいました。
0はフラグなどでも使う要素なので、何とかしたい。
ということで、もうちょっとスマートに出来る方法がこれ。
1 | $arr = array_filter($arr, 'strlen'); |
結果。
1 2 3 4 5 6 7 8 9 | $arr = Array ( [America] => ok [Belgium] => 1 [China] => 0 [England] => [France] => [Hong Kong] => 1 ) |
「2番目の引数の関数(strlen)をコールして「値の文字列の長さ」を調査、FALSEであればその要素を削除」という仕様なので、FALSE と NULL は削られますが、0 、半角スペースは削除されません。
これで欲しい結果が取得出来ます。
なるほどですね。