**一、trim() 函数配合 array_map**
`array_map()` 是一个强大的内建函数,它可以对数组中的每个值执行回调函数并返回新的映射后的数组。结合 `trim()` 函数可以方便地清除字符串首尾的空白字符:
php
$array = [' hello ', 'world', '', "\texample", " \nlast"];
$trimmedArray = array_filter(array_map('trim', $array));
print_r($trimmedArray);
上述代码首先运用了 `array_map()` 对 `$array` 中的所有元素进行 trim 处理,然后用 `array_filter()` 进一步过滤掉那些经过trim后为空(即全部为 whitespace)的元素。
然而此方法无法剔除非首位出现的连续内部空白。
**二、preg_replace() 结合正则表达式**
若要彻底清理包括但不限于中间多余空白在内的所有不必要空白,可借助于 preg_replace 和适当的正则表达式来完成任务:
php
$array = [" hello ", "", " world\t\n", "!@#$%^&*() "];
$cleanedArray = array_map(function ($value) {
return preg_replace('/\s+/', '', $value);
}, $array);
print_r($cleanedArray);
在这个示例里,我们利用了一个匿名函数作为 `array_map` 的回调参数,在该函数体内调用了 `preg_replace()` 来替换匹配`\s+`(表示至少有一个及以上空白符号)的部分,将其替换成无内容(`''`),从而达到删除任何位置上的空白的效果。
**三、自定义循环遍历与判断逻辑**
对于更复杂的场景,例如需要区分不同类型的空白或是特定条件下的清理操作,则可以通过手动迭代和检查的方式来逐个处理数组项:
php
$array = [null, false, true, ' foo bar ', ''];
$result_array = [];
foreach ($array as $item) {
if (is_string($item)) { // 只针对字符串类型做空白去除
$strippedItem = trim(preg_replace("/[\p{Z}\p{C}]+/u", '', $item)); // 移除全角半角各种空白及控制字符
if (!empty($strippedItem)) { // 非空才添加到结果数组
$result_array[] = $strippedItem;
}
} elseif (!$item && !in_array(gettype($item),['boolean','NULL'])) { // 其他非布尔型假值以及 NULL 值也排除在外
continue;
} else {
$result_array[] = $item; // 添加其他不受影响的数据如数值、真 boolean 等至新数组
}
}
print_r($result_array);
以上这段代码展示了如何按照自身需求定制规则去严格筛选出有效的、不含空白的字符串以及其他允许存在的项目加入到一个新的干净数组当中。
总结起来,在不同的应用场景下,可以根据实际需求灵活采用合适的手段以高效且精准的方式消除PHP数组内的空白元素,无论是简单的前后修整还是深度清洗都能轻松应对。同时值得注意的是,虽然提供了多种方案供选择,但在追求效率的同时也要兼顾业务功能的实际要求,避免过度设计带来的资源浪费。
标签: php去掉空的数组