如何从数组中删除空值? [复制]
Posted
技术标签:
【中文标题】如何从数组中删除空值? [复制]【英文标题】:How to remove null values from an array? [duplicate] 【发布时间】:2014-01-07 17:32:20 【问题描述】:我有一个数组
数组([0] => 0 [1] => [2] => 3 [3] => )
我想从中删除空值,结果应该是这样的
数组 ([0] => 0 [1] => 3) 我不想从数组中删除 0 值。
【问题讨论】:
php.net/array_filter 带有自定义回调。 在 php.net 上查找数组过滤器 简单解决方案:***.com/a/66004034/7186739 【参考方案1】:这样就可以了:
array_filter($arr, static function($var)return $var !== null; );
代码示例:https://3v4l.org/jtQa2
对于旧版本(php
function is_not_null ($var) return !is_null($var);
$filtered = array_filter($arr, 'is_not_null');
代码示例:http://3v4l.org/CKrYO
【讨论】:
仅适用于较新的版本,但这比奇怪的 strlen 东西要好得多。 对于旧版本,可以预先声明使用的功能。 您可以完全排除第二个参数;array_filter($arr);
默认会移除 null
。
@AlexP 不,你错了。正如3v4l.org/Y9KCX 所见,您的解决方案将删除empty()
的所有内容-而不仅仅是NULL。
@AlexP:如果您关闭过滤器功能,例如字符串“0”将被删除。【参考方案2】:
您可以使用 array_filter()
来删除数组中的 null 空值
print_r(array_filter($arr, 'strlen'));
【讨论】:
这不起作用。 $ php -r "var_dump(array_filter([0, null, false, 'hi', ''], 'strlen'));"数组(2) [0] => int(0) [3] => 字符串(2) "hi" 这也删除了'0'、假或假值,一般可能已经忘记了其他值。 这将包括不为空的'' 你甚至可以做 $arr = array_filter($arr);没有回调,它仍然会删除空项目。【参考方案3】:你可以循环遍历它。
<?php
foreach ($array as $i=>$row)
if ($row === null)
unset($array[$i]);
CodePad
如果你想重新索引数组以消除键之间的间隙,你可以使用一个新数组:
<?php
$array2 = array();
foreach ($array as $row)
if ($row !== null)
$array2[] = $row;
$array = $array2;
CodePad
【讨论】:
【参考方案4】:你现在陷入了一个麻烦的世界,因为要区分 null 与 0 与 false 与 "" 与 0.0 并不太容易。不过不用担心,是可以解决的:
$result = array_filter( $array, 'strlen' );
这本身很可怕,但似乎有效。
编辑:
这是一个糟糕的建议,因为这个技巧依赖于一个奇怪的极端情况:
strlen(0) 将为 strlen("0") -> 1,因此为真 strlen(NULL) 将为 strlen("")->0,因此为 false strlen("") 将为 strlen(("")->0,因此为 false 等你应该这样做的方式是这样的:
$my_array = array(2, "a", null, 2.5, NULL, 0, "", 8);
function is_notnull($v)
return !is_null($v);
print_r(array_filter($my_array, "is_notnull"));
这很好读。
【讨论】:
【参考方案5】:<?php
$arr = array( 0 => 0, 1=>null, 2=>3, 3=>null);
foreach ($arr as $key=>$val)
if ($val === null)
unset($arr[$key]);
$new_arr = array_values($arr);
print_r($new_arr);
?>
输出:
Array
(
[0] => 0
[1] => 3
)
【讨论】:
【参考方案6】:简单
$keys=array_keys($yourArray,NULL);
if(!empty($keys))
foreach($keys as $key)
unset($yourArray[$key]);
var_dump($yourarray);
【讨论】:
以上是关于如何从数组中删除空值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章