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