我想删除NULL
,FALSE
和''
值。
我使用了array_filter
,但它也删除了0
。
有anty功能可以做我想要的吗?
array(NULL,FALSE,'',0,1) -> array(0,1)
答案 0 :(得分:42)
array_filter
, identical
comparison operator应该可以正常工作。
$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');
答案 1 :(得分:34)
来自http://php.net/manual/en/function.array-filter.php#111091:
如果要删除NULL,FALSE和Empty Strings,但保留0的值,可以使用strlen作为回调函数:
array_filter($array, 'strlen');
答案 2 :(得分:5)
array_filter
不起作用,因为默认情况下,它会删除任何等同于FALSE
的内容,并且PHP认为0
等效于false。 PHP manual就此问题说了这个话:
转换为布尔值时,以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串“0”
- 包含零元素的数组
- 一个零成员变量的对象(仅限PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标签创建的SimpleXML对象
其他每个值都被视为TRUE(包括任何资源)。
您可以将第二个参数传递给array_filter
,并回调您自己编写的函数,告诉array_filter
是否删除该项。
假设您要删除除零之外的所有FALSE等效值,这是一个很容易编写的函数:
function RemoveFalseButNotZero($value) {
return ($value || is_numeric($value));
}
然后你只需用过滤后的数组覆盖原始数组:
$array = array_filter($array, "RemoveFalseButNotZero");
答案 3 :(得分:2)
使用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"));
?>
答案 4 :(得分:1)
单行总是很好。
$clean_array = array_diff(array_map('trim', $my_array), array('', NULL, FALSE));
说明:
array_diff
的第一个参数: $my_array
的剪裁版本。使用array_map
,通过trim
函数从每个元素中修剪周围的空白。如果一个元素包含一个只有空格(即制表符,空格)的字符串,那么使用剪裁版本是件好事,我认为这也是想要删除的。如果你不想修剪元素,你可以很容易地使用$ my_array作为第一个参数。array_diff
的第二个参数:您要从$my_array
中删除的项目数组。''
,NULL
和FALSE
位于第二个数组中,array_diff
永远不会返回它们。修改强>
事实证明,您不需要在第二个数组中拥有NULL
和FALSE
。相反,您可以拥有''
,它的工作方式相同:
$clean_array = array_diff(array_map('trim', $my_array), array(''));
答案 5 :(得分:0)
检查它是否小于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);
答案 6 :(得分:0)
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
)
答案 7 :(得分: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
答案 8 :(得分:-2)
function ExtArray($linksArray){
foreach ($linksArray as $key => $link)
{
if ($linksArray[$key] == '' || $linksArray[$key] == NULL || $linksArray[$key] == FALSE || $linksArray[$key] == '')
{
unset($linksArray[$key]);
}else {
return $linksArray[$key];
}
}
}
此功能可以帮助您
答案 9 :(得分:-4)
array_filter是解决问题的功能......