我想移除 NULL
、FALSE
和 ''
值。
我使用了 array_filter
,但它也会移除 0
的值。
有没有其他函数可以满足我的需求?
array(NULL,FALSE,'',0,1) -> array(0,1)
我想移除 NULL
、FALSE
和 ''
值。
我使用了 array_filter
,但它也会移除 0
的值。
有没有其他函数可以满足我的需求?
array(NULL,FALSE,'',0,1) -> array(0,1)
array_filter
如果使用全等比较运算符
,应该可以正常工作。
$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 !== '');
});
$res = array_filter($values, 'is_numeric');
从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(零)
- 浮点数0.0(零)
- 空字符串和字符串“0”
- 元素为零的数组
- 成员变量为零的对象(仅适用于PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标记创建的SimpleXML对象
其他所有值都被视为TRUE(包括任何资源)。
array_filter
传递第二个参数,该参数是指向您编写的函数的回调,该函数告诉array_filter
是否删除该项。function RemoveFalseButNotZero($value) {
return ($value || is_numeric($value));
}
$array = array_filter($array, "RemoveFalseButNotZero");
$array= array_filter($array, function($val) { return ($val || is_numeric($val));});
- user1914530使用自定义回调函数与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
的第一个参数:使用array_map
函数,对$my_array
中的每个元素进行去除前后空格的操作(通过trim
函数)。使用去除空格后的版本是比较好的做法,以防某个元素包含仅由空格(如制表符、空格)组成的字符串,这些字符串也应该被移除。如果您不想去除元素的空格,则可以直接使用$my_array作为第一个参数。array_diff
的第二个参数:一个要从$my_array
中删除的项目数组。NULL
和FALSE
都在第二个数组中,所以它们永远不会被array_diff
返回。编辑:
事实证明,在第二个数组中,您不需要使用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);
array(NULL,FALSE,'hello world')
呢? - user166390function 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
)
或者您可以使用带有 'strlen'
参数的 array_filter
:
// 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
strlen
将会发出一个“已弃用”的错误警告,内容为“strlen():向类型为string的参数#1($string)传递null是不被允许的”。 - Brad Kentfunction 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];
}
}
}
这个函数可能会对你有所帮助
NULL
、FALSE
和""
更多的内容。 - AgentConundrum