php 数组筛选器只删除不含空格的值

eqoofvh9  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(73)

阵列示例

如上图所示,array_filter只删除像' '这样没有白色的值。
对于底部的2值也是空的,但因为它有白色,所以它不会过滤它。
有什么办法吗?我尝试preg_replace()和trim()也无法删除带有空格的空值.

6ie5vjzr

6ie5vjzr1#

对于array_filter,如果未提供callback,则将删除数组中所有等于FALSE的条目。您可以使用array_filtercallback参数来完成此操作。

<?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不是一个好的做法:这会减慢代码的速度,并使代码变得更加复杂。

$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);
bfhwhh0e

bfhwhh0e2#

如果你想修剪数组中的所有值,只保留至少包含一个非空格字符的元素,preg_filter()可以一步完成。
该模式实现了一个非贪婪的捕获组,以隔离删除了前导和/或尾随空格的子字符串。
代码:(Demo

$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值。

相关问题