php数组怎么筛除零值和负值_php数组零负剔除筛选【步骤】
技术百科
星夢妙者
发布时间:2026-01-27
浏览: 次 用array_filter()剔除零值和负值最直接,需自定义回调判断(float)$v > 0,避免使用!empty()或松散比较导致负数漏筛,注意"0"等字符串需转数值再比较。
用 array_filter() 剔除零值和负值最直接
PHP 中筛掉数组里的 0、-1、-5.5 这类非正数,首选 array_filter() 配合自定义回调。它默认会过滤掉所有“falsy”值(比如 0、""、null),但注意:-1、-0.5 是 truthy,必须显式判断。
实操建议:
- 写回调时用
$value > 0,别用!empty($value)或$value,否则负数会漏掉 - 如果数组含字符串数字(如
"-3"),先floatval()或(float)转换再比较,否则字符串比较可能出错 - 保留原键名:默认
array_filter()不重排索引,需要时再用array_values()
$arr = [0, -2, 3, "4", "-1", 5.5];
$result = array_filter($arr, function($v) {
return (float)$v > 0;
});
// 结果:[2 => 3, 3 => "4", 5 => 5.5]
注意 0 和 "0" 的区别
PHP 中 0(整型)、0.0(浮点)、"0"(字符串)在松散比较下都为 false,但 array_filter() 默认不转换类型。如果你的数组混有 "0",它不会被自动过滤——因为字符串 "0" 是 truthy。
常见错误现象:
- 用
array_filter($arr)简单调用,结果"0"还在,以为函数失效 - 用
intval()转换再判断,但"0.5"会变0,误删
正确做法是统一转为数值再比大小:
$arr = [0, "0", "-1", "2.7", "0.0"];
$result = array_filter($arr, function($v) {
$n = is_numeric($v) ? (float)$v : 0;
return $n > 0;
});
性能敏感场景慎用匿名函数
如果数组很大(比如上万项

替代方案:
- 用
array_filter($arr, 'ctype_digit')只适用于纯正整数字符串(如"123"),不适用小数或负数 - 预定义函数更高效:
function is_positive($v) { return (float)$v > 0; },然后传函数名字符串 - 若确定全是数字类型,且允许重排索引,可配合
array_values()+array_filter()减少后续处理成本
关联数组里键名带负号怎么办
这里说的是数组键(key),不是值(value)。比如 [-1 => 'a', 0 => 'b', 2 => 'c'] —— array_filter() 操作的是值,键不受影响;但如果你本意是“删掉键为负数的元素”,那就得用 foreach 手动重建。
容易被忽略的地方:
-
array_filter()不动键名,所以[-1 => 'a', 2 => 'c']过滤后还是这个结构,只是值变了 - 要按键筛选,得用
array_keys()+array_intersect_key()组合,例如:array_intersect_key($arr, array_filter(array_keys($arr), function($k) { return $k >= 0; })) - 键名是字符串如
"-1",需先(int)转换再判断,否则"-1" > 0是 true(字符串比较规则)
# 的是
# 会有
# 如果你
# 还在
# 适用于
# 自定义
# 循环
# int
# 区别
# 字符串
# git
# function
# 回调
# NULL
# foreach
# php
# 整型
# Float
# 浮点
# 组里
# 关联数组
# 数字类型
# 键名
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows怎样关闭锁屏广告_Windows关闭
- Win11怎么更改电脑密码_Windows 11修
- php本地部署后session无法保存_sessi
- c# 服务器GC和工作站GC的区别和设置
- php和redis连接超时怎么办_phpredis
- 如何在Golang中实现基础配置管理功能_Gola
- Windows电脑键盘突然失灵怎么办?(驱动与硬件
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- Windows怎样关闭开始菜单推荐广告_Windo
- 如何使用Golang反射将map转换为struct
- Mac的“调度中心”与“空间”怎么用_Mac多桌面
- php怎么操作Redis_Redis扩展连接与基本
- Windows10如何更改系统字体大小_Win10
- Linux怎么实现内网穿透_Linux安装Frp客
- Win11怎么设置任务栏透明_Windows11使
- php485读数据时阻塞怎么办_php485非阻塞
- MySQL 中使用 IF 和 CASE 实现查询字
- php文件怎么变mp4保存_php输出视频流保存为
- 如何使用Golang捕获测试日志_Golang t
- 如何处理“XML格式不正确”错误 常见XML we
- 如何在Golang中写入JSON文件_保存结构体数
- Go 语言标准库为何不提供泛型 Contains
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- Win11系统占用空间大怎么办 Win11深度瘦身
- Win11怎么设置多显示器任务栏 Win11扩展任
- 如何在Golang中定义接口_抽象方法和多态实现
- c# 如何深拷贝和浅拷贝
- php增删改查在php8里有什么变化_新特性对cu
- 如何用::实现单例模式_php静态方法与作用域操作
- php高频调试功能有哪些_php常用调试函数与工具
- 如何在 Go 中正确反序列化多个同级 XML 元素
- c++中如何对数组进行排序_c++数组排序算法汇总
- 如何使用Golang操作指针变量_Golang解引
- Win11怎么设置快速访问主页_Windows11
- mac怎么安装字体_MAC添加第三方字体与字体册管
- Windows10电脑怎么设置防火墙出站规则_Wi
- Python网络超时处理_健壮性设计说明【指导】
- php下载安装选zip还是msi格式_两种安装包对
- Win11怎么解压RAR文件 Win11自带解压功
- 如何使用Golang recover捕获panic
- 如何在Golang中使用encoding/gob序
- Win11任务栏怎么调到左边_Win11开始菜单居
- XML的“混合内容”是什么 怎么用DTD或XSD定
- Mac怎么给文件夹加密_Mac创建加密磁盘映像教程
- c++中的可变参数模板(variadic temp
- Win11屏幕亮度突然变暗怎么解决_自动变暗问题处
- Windows蓝屏错误0x0000001E怎么修复
- 如何解决Windows字体显示模糊的问题?(Cle
- c++的STL算法库find怎么用 在容器中查找指

QQ客服