阵列示例
如上图所示,array_filter只删除像' '这样没有白色的值。对于底部的2值也是空的,但因为它有白色,所以它不会过滤它。有什么办法吗?我尝试preg_replace()和trim()也无法删除带有空格的空值.
6ie5vjzr1#
对于array_filter,如果未提供callback,则将删除数组中所有等于FALSE的条目。您可以使用array_filter的callback参数来完成此操作。
array_filter
callback
FALSE
<?php $array = [ 'varA' => '', 'varB' => ' ', 'varC' => '1', 'varD' => ' ', ]; $newArr = array_filter($array, function($v, $k){ return !empty(trim($v)); }, ARRAY_FILTER_USE_BOTH); var_dump($newArr);
参见:http://php.net/manual/en/function.array-filter.php编辑:对于多维数组,可以遍历数组,并对每个元素执行array_filter。对每个元素执行str_replace不是一个好的做法:这会减慢代码的速度,并使代码变得更加复杂。
str_replace
$array = array( array( 'varA' => '', 'varB' => ' ', 'varC' => '1', 'varD' => ' ', ), array( 'varA' => '!!!', 'varB' => ' ', 'varC' => 'xxx', 'varD' => '', ) ); $newArr = $array; foreach ($newArr as &$each){ $each = array_filter($each, function($v, $k){ return !empty(trim($v)); }, ARRAY_FILTER_USE_BOTH); } var_dump($newArr);
bfhwhh0e2#
如果你想修剪数组中的所有值,只保留至少包含一个非空格字符的元素,preg_filter()可以一步完成。该模式实现了一个非贪婪的捕获组,以隔离删除了前导和/或尾随空格的子字符串。代码:(Demo)
preg_filter()
$array = [ 'one' => ' 1 ', 'two' => '2', 'three' => '', 'four' => ' ', 'five' => '0', ]; var_export( preg_filter('/^\s*(\S.*?)\s*$/', '$1', $array) );
输出量:
array ( 'one' => '1', 'two' => '2', 'five' => '0', )
提醒一下如果您使用array_filter()而不使用自定义回调函数,那么它将销毁零值/false值/null值。
array_filter()
2条答案
按热度按时间6ie5vjzr1#
对于
array_filter
,如果未提供callback
,则将删除数组中所有等于FALSE
的条目。您可以使用array_filter
的callback
参数来完成此操作。参见:http://php.net/manual/en/function.array-filter.php
编辑:
对于多维数组,可以遍历数组,并对每个元素执行array_filter。对每个元素执行
str_replace
不是一个好的做法:这会减慢代码的速度,并使代码变得更加复杂。bfhwhh0e2#
如果你想修剪数组中的所有值,只保留至少包含一个非空格字符的元素,
preg_filter()
可以一步完成。该模式实现了一个非贪婪的捕获组,以隔离删除了前导和/或尾随空格的子字符串。
代码:(Demo)
输出量:
提醒一下如果您使用
array_filter()
而不使用自定义回调函数,那么它将销毁零值/false值/null值。