【PHP】配列の空要素を削除する方法
2019/04/23
配列を調査し、要素が空白の場合はキーごと削除する方法を備忘録としてポストします。
配列から空要素をキーごと削除する方法
以下の様な配列があるとします。
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」、「半角スペース」は削除されません。
これで欲しい結果が取得出来ます。
なるほどですね。