eyecatch php

PHP

【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」、「半角スペース」は削除されません。

これで欲しい結果が取得出来ます。
なるほどですね。

-PHP
-, , , , ,