我有一个像这样的数组:
$arr = [
'red',
' ',
'blue',
' ',
'green',
' ',
'white',
' ',
'black',
' '
];
我正在尝试删除所有仅包含空格的项目。
这是预期的结果:
[
'red',
'blue',
'green',
'white',
'black'
]
如果这些空格项为空,我可以这样做。所以我可以使用
$arr = array_filter($arr);
。但在这种情况下,因为有空格而不是没有,所以 array_filter()
没有用。有什么方法可以做到吗?
您可以使用
array_map
将其与 trim
结合起来:
$arr = array_filter(array_map('trim', $arr));
这不会重新索引键,如果你愿意,你可以使用
array_values
:
$arr = array_values(array_filter(array_map('trim', $arr)));
array_filter 采用回调函数。你可以做任何你想做的事。
array_filter($arr, function($v, $k) {
return trim($v) !== '';
}, ARRAY_FILTER_USE_BOTH);
hth
所描述的任务根本不是“修剪”;它是关于删除仅包含空格的元素。
我将扩展示例数据以揭示我的建议与之前发布的答案之间的潜在差异,这些建议在过滤时不会改变原始值。
$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)
);
两个输出:(演示)
array (
0 => 'red',
2 => 'blue',
4 => '',
5 => 'green ',
7 => 'white',
9 => 'black',
)
在修剪后使用
array_filter()
的默认行为(如 Kevin 的答案所示)可能会改变原始值并删除错误值(例如零)。