php 删除只包含空格的数组元素?

r1wp621o  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(109)

我有一个这样的数组:

$arr = [
   'red',
   '   ',
   'blue',
   '       ',
   'green',
   '  ',
   'white',
   '    ',
   'black',
   '           '
];

我正在尝试删除所有包含空格的项目。
这是预期的结果:

[
    'red',
    'blue',
    'green',
    'white',
    'black'
]

如果这些空白项是空的,我就可以这样做。所以我可以使用$arr = array_filter($arr);。但在本例中,因为有空格而不是空白,所以array_filter()没有用。有没有办法做到这一点?

lc8prwob

lc8prwob1#

您可以使用trim将其与array_map耦合:

$arr = array_filter(array_map('trim', $arr));

这不会重新索引键,如果你愿意,你可以使用array_values

$arr = array_values(array_filter(array_map('trim', $arr)));
8nuwlpux

8nuwlpux2#

array_filter接受回调函数。你想做什么都行。

array_filter($arr, function($v, $k) {
    return trim($v) !== '';
}, ARRAY_FILTER_USE_BOTH);

HTH

pprl5pva

pprl5pva3#

所描述的任务根本不是关于“修剪”;它是关于删除只包含空格的元素。
我将扩展示例数据,以暴露我的建议(在过滤时不改变原始值)与早期发布的答案之间的潜在差异。

$array = [
    'red',
    '   ',
    'blue',
    '       ',
    '',
    'green  ',
    '  ',
    'white',
    '    ',
    'black',
    '           ',
];

非正则表达式用于确定不全是空格的字符串。

var_export(
    array_filter($array, fn($v) => !ctype_space($v))
);

一个正则表达式,它实际上删除了所有由一个或多个空格字符组成的元素(包括制表符,新行等)。

var_export(
    preg_grep('/^\s+$/', $array, PREG_GREP_INVERT)
);

两个输出:(Demo

array (
  0 => 'red',
  2 => 'blue',
  4 => '',
  5 => 'green  ',
  7 => 'white',
  9 => 'black',
)

在修剪后使用array_filter()的默认行为(如Kevin的回答所示)有可能改变原始值并删 debugging 误值(如零)。

相关问题