NULL
、FALSE
、''
の値を削除したい。
array_filter
を使用しましたが、0
も削除されます。
やりたいことはありますか?
array(NULL,FALSE,'',0,1) -> array(0,1)
array_filter
identical
比較演算子 を使用する場合、正常に機能するはずです。
$values = [NULL, FALSE, '', 0, 1];
function myFilter($var){
return ($var !== NULL && $var !== FALSE && $var !== '');
}
$res = array_filter($values, 'myFilter');
または、フィルタリング関数を定義したくない場合は、無名関数(クロージャ)を使用することもできます。
$res = array_filter($values, function($value) {
return ($value !== null && $value !== false && $value !== '');
});
数値だけが必要な場合は、コールバックとして is_numeric を使用できます。 example
$res = array_filter($values, 'is_numeric');
From http://php.net/manual/en/function.array-filter.php#111091 から:
NULL、FALSE、空の文字列を削除し、値を0のままにする場合は、コールバック関数としてstrlenを使用できます。
array_filter($array, 'strlen');
array_filter
は機能しません。デフォルトでは、FALSE
と同等のものがすべて削除され、PHPは0
をfalseと同等と見なします。 PHPマニュアル はこれについてこの件について述べています:
ブール値に変換する場合、次の値はFALSEと見なされます。
- ブール値FALSE自体
- 整数0(ゼロ)
- float 0.0(ゼロ)
- 空の文字列と文字列 "0"
- 要素がゼロの配列
- メンバー変数がゼロのオブジェクト(PHP 4のみ)
- 特殊なタイプNULL(未設定の変数を含む)
- 空のタグから作成されたSimpleXMLオブジェクト
他のすべての値はTRUE(リソースを含む)と見なされます。
アイテムを削除するかどうかをarray_filter
に伝える、自分で作成した関数へのコールバックを使用して、2番目のパラメーターをarray_filter
に渡すことができます。
すべてのFALSEに相当する値以外のゼロを削除する場合、これは簡単に記述できる関数です。
function RemoveFalseButNotZero($value) {
return ($value || is_numeric($value));
}
次に、元の配列をフィルター処理された配列で上書きします。
$array = array_filter($array, "RemoveFalseButNotZero");
Array_filterでカスタムコールバック関数を使用します。この例を参照してください。PHPマニュアル、コールバック関数の使用方法についての説明を参照してください。この例のコールバック関数は、奇数/偶数に基づいてフィルタリングします。あなたの要件。
<?php
function odd($var)
{
// returns whether the input integer is odd
return($var & 1);
}
function even($var)
{
// returns whether the input integer is even
return(!($var & 1));
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
ワンライナーは常にいいです。
$clean_array = array_diff(array_map('trim', $my_array), array('', NULL, FALSE));
説明:
array_diff
の最初のパラメーター:$my_array
のトリミングされたバージョン。 array_map
を使用すると、周囲の空白はtrim
関数を介してすべての要素から削除されます。要素に空白以外の文字列(タブ、スペースなど)が含まれている場合は、トリムバージョンを使用することをお勧めします。これも削除したいと思います。要素をトリムしたくない場合は、1番目のパラメーターに$ my_arrayを簡単に使用できます。array_diff
の2番目のパラメーター_:$my_array
から削除するアイテムの配列。''
、NULL
、およびFALSE
は2番目の配列内にあるため、array_diff
によって返されることはありません。編集:
2番目の配列にNULL
とFALSE
を含める必要がないことがわかります。代わりに、''
を指定するだけで、同じように機能します。
$clean_array = array_diff(array_map('trim', $my_array), array(''));
それが1未満で-1より大きいかどうかを確認し、削除しない場合は...
$arrayValue = (NULL,FALSE,'',0,1);
$newArray = array();
foreach($arrayValue as $value) {
if(is_int($value) || ($value>-1 && $value <1)) {
$newArray[] = $value;
}
}
print_r($newArray);
function my_filter($var)
{
// returns values that are neither false nor null (but can be 0)
return ($var !== false && $var !== null && $var !== '');
}
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => '',
5 => 0
);
print_r(array_filter($entry, 'my_filter'));
出力:
Array
(
[0] => foo
[2] => -1
[5] => 0
)
または、array_filter
とともに 'strlen'
パラメータ:
// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result = array_filter($array, 'strlen');
https://www.php.net/manual/en/function.array-filter.php#111091