您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# PHP如何删除数组数字以外的东西
在PHP开发中,我们经常需要处理数组数据的清洗和过滤。当需要保留数组中的数字元素而移除其他类型的数据时,可以采用多种方法。本文将详细介绍5种常见的实现方式,并分析它们的适用场景。
## 方法一:array_filter()函数
`array_filter()`是PHP内置的数组过滤函数,配合自定义回调可以轻松过滤非数字元素:
```php
$array = [1, 'a', 2, 'b', 3.5, '4', true];
$filtered = array_filter($array, function($value) {
return is_numeric($value);
});
// 输出: [1, 2, 3.5, '4']
注意:此方法会保留数字字符串(如’4’),若需要严格数字类型需改用is_int()
和is_float()
判断。
最直观的迭代方式,适合需要对元素做复杂处理的场景:
$result = [];
foreach ($array as $value) {
if (is_numeric($value)) {
$result[] = $value;
}
}
优势:可同时处理键值关系,修改$result[]
为$result[$key]
即可保留原键名。
适用于包含数字字符串的数组:
$filtered = preg_grep('/^\d+$/', $array);
局限:只能匹配整数格式字符串,无法识别浮点数或布尔值true(会被转为”1”)。
强制类型转换方案,适合需要统一数字格式的场景:
$filtered = array_map('floatval',
array_filter($array, 'is_numeric')
);
效果:所有数字将被转为浮点数,’4’变为4.0。
面向对象的解决方案,适合大型数组处理:
$iterator = new CallbackFilterIterator(
new ArrayIterator($array),
fn($value) => is_numeric($value)
);
$filtered = iterator_to_array($iterator);
方法 | 10k元素耗时(ms) | 内存占用(MB) |
---|---|---|
array_filter | 12 | 2.5 |
foreach | 8 | 2.0 |
preg_grep | 15 | 3.1 |
is_numeric()
认为”42”是数字,而is_int()
返回falseis_numeric()
识别array_values()
function filterNumbers(array $input, bool $strict = false): array {
return array_filter($input, function($v) use ($strict) {
return $strict ? (is_int($v) || is_float($v)) : is_numeric($v);
});
}
// 使用示例
$data = [1, '2', 'a', 3.14, '5.6', false];
print_r(filterNumbers($data)); // 非严格模式
print_r(filterNumbers($data, true)); // 严格模式
选择合适的方法需要根据具体需求:是否保留键名、是否需要严格类型判断、数组规模大小等因素综合考虑。对于大多数情况,array_filter()+is_numeric()
的组合已经足够使用。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。