やりたいこと
既に実装済みのメソッドを呼び出したところ、戻り値の配列内に空文字の要素があった。
空文字の要素は後続の処理に影響があるため削除したい。
方法
簡易版
array_filterに配列のみ渡す。
https://www.php.net/manual/ja/function.array-filter.php
$input = [
"AB01", "", "CD23", "", "EF45"
];
$result = array_filter($input);
var_dump($result);
実行すると空文字の要素は削除される。
array(3) {
[0]=>
string(4) "AB01"
[2]=>
string(4) "CD23"
[4]=>
string(4) "EF45"
}
この場合、内部的にはempty()がtrueとなる値が削除される。
そのため、nullやfalse、それぞれの型の初期値なども削除される。
https://www.php.net/manual/ja/function.empty.php
様々な入力値で同じ処理を通してみる。
$input = [
null,
true, false,
0, 1, -1,
0.0, 0.1, -0.1,
"", "0", "1", "a",
[], [1, 2, 3],
new DateTime(),
function() {}
];
$result = array_filter($input);
var_dump($result);
array(10) {
[1]=>
bool(true)
[4]=>
int(1)
[5]=>
int(-1)
[7]=>
float(0.1)
[8]=>
float(-0.1)
[11]=>
string(1) "1"
[12]=>
string(1) "a"
[14]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
[15]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2022-08-21 10:48:57.930117"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
[16]=>
object(Closure)#2 (0) {
}
}
もしempty()での判定に不都合がある場合、コールバック関数を使用して不要な値を狙って削除する。
コールバック関数使用
array_filterに空文字を判定するコールバック関数を渡す。
$input = [
null,
true, false,
0, 1, -1,
0.0, 0.1, -0.1,
"", "0", "1", "a",
[], [1, 2, 3],
new DateTime(),
function() {}
];
$result = array_filter(
$input,
function($value) {
return $value !== "";
}
);
var_dump($result);
空文字の要素のみ削除された。
array(16) {
[0]=>
NULL
[1]=>
bool(true)
[2]=>
bool(false)
[3]=>
int(0)
[4]=>
int(1)
[5]=>
int(-1)
[6]=>
float(0)
[7]=>
float(0.1)
[8]=>
float(-0.1)
[10]=>
string(1) "0"
[11]=>
string(1) "1"
[12]=>
string(1) "a"
[13]=>
array(0) {
}
[14]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
[15]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2022-08-21 10:50:29.947398"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
[16]=>
object(Closure)#2 (0) {
}

