やりたいこと
既に実装済みのメソッドを呼び出したところ、戻り値の配列内に空文字の要素があった。
空文字の要素は後続の処理に影響があるため削除したい。
方法
簡易版
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) { }