我想删除NULL
,FALSE
和''
values 。
我用过array_filter
,但它也删除了0
's。
有什么功能可以做我想做的吗?
array(NULL,FALSE,'',0,1) -> array(0,1)
我想删除NULL
,FALSE
和''
values 。
我用过array_filter
,但它也删除了0
's。
有什么功能可以做我想做的吗?
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作为回调:示例
$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
是否删除该项目。
假设您要删除除零之外的所有 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
如果元素包含的字符串只是空格(即制表符、空格),最好使用修剪后的版本,我假设它也希望被删除。如果您不想修剪元素,则可以轻松地将 $my_array 用作第一个参数。array_diff
:要从中删除的项目数组$my_array
。''
、NULL
和FALSE
位于第二个数组中,所以它们永远不会被 . 返回array_diff
。编辑:
事实证明,您不需要在第二个数组中拥有NULL
and 。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
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];
}
}
}
这个功能可以帮助你