网站首页 > 技术文章 正文
弱类型语言的php对于 0 、"0"、"000" 、"00" 判断与处理问题
nanyue 2025-01-18 22:58:32 技术文章 4 ℃问题分析:
当您的变量出现0 、"0"、"000" 、"00" 等字符时,由于代码不严谨的时 出现的问题
解决办法
对不同类型的变量需要注意变量的使用场景与逻辑 进行特殊处理与逻辑判断
1、使用 === 恒等与 或者 !== 恒不等于 判断 类型字符串 ;
$a = '0' ;
$b = 0 ;
$c = '000' ;
var_dump($a == $b) ;
// boolean true
echo PHP_EOL ;
var_dump($a == $c) ;
// boolean true
echo PHP_EOL ;
var_dump($b == $c) ;
// boolean true
echo PHP_EOL ;
// todo 弱类型下 三个都是相等的 ;
var_dump($a === $b) ;
// boolean false
echo PHP_EOL ;
var_dump($a === $c) ;
// boolean false
echo PHP_EOL ;
var_dump($b === $c) ;
// boolean false
// todo 强类型下他们就是不一样的 ;
2、使用 in_array 判断 字符串是否存在 , 开启strict 的 严谨模式
$a = '0' ;
$b = 0 ;
$c = '000' ;
$arr = [$a,$b,$c] ;
$d = '00' ;
var_dump(in_array($d,$arr)) ;
// boolean true
echo PHP_EOL ;
// say: 宽松模式下 '00' 字符串也存在$arr数组中 其实就是弱类型的弊端,不注意的话,就容易导致问题 '00' 与 0 '0','000' 匹配成功 其实 数据组并没有‘00’;
var_dump(in_array($d,$arr,true)) ;
// boolean false
echo PHP_EOL ;
// say: 严谨模式下 '00' 字符串不存在$arr数组中 , 不用类型的数据是不会相等的,也就是 '00' 不会与 0 '0','000' 匹配成功,满足严谨的逻辑 ;
问题2 分析:
当一个数组中包含了这个0 、"0"、"000" 、"00" 等字符时 , 使用array_fliter 函数去除空值,可以将0 、"0"、"000" 、"00" 已去除了的问题 ;
解决办法:
$temp_label_arr = array_filter($temp_label_arr,function ($v, $k){
return $v != '' && $v != null ;
},ARRAY_FILTER_USE_BOTH) ;
$a = '0' ;
$b = 0 ;
$c = '000' ;
$f = 1 ;
$d = '00' ;
$e = '' ;
$g = null ;
// question : 去除数组中的 空值 ;
$arr = [$a,$b,$c,$f,$d,$e,$g] ;
var_dump($arr) ;
echo PHP_EOL ;
/**
* array (size=7)
0 => string '0' (length=1)
1 => int 0
2 => string '000' (length=3)
3 => int 1
4 => string '00' (length=2)
5 => string '' (length=0)
6 => null
*
*/
// 使用 array_filter 函数直接去除
var_dump(array_filter($arr)) ;
/**
* array (size=3)
2 => string '000' (length=3)
3 => int 1
4 => string '00' (length=2)
*
*/
// result : 没有解决我们的问题 ,同时把 ‘0’ 和 0 也一并剔除了
eq 2 : array_filter 的 回调函数callback 处理我们的数组 得到应得的数组
$new_arr = array_filter($arr,function ($v, $k){
return $v != '' && $v != null ;
},ARRAY_FILTER_USE_BOTH) ;
var_dump($new_arr) ;
/**
* array (size=4)
0 => string '0' (length=1)
2 => string '000' (length=3)
3 => int 1
4 => string '00' (length=2)
*/
// result : 根据自己的续期得到对应的数据数组
1
猜你喜欢
- 2025-01-18 word中公式输入方法
- 2025-01-18 VLOOKUP函数之另类用法,让领导对你刮目相看
- 2025-01-18 LOOKUP中0,1是什么鬼,困扰我多年的疑惑,这课讲明白了
- 2025-01-18 Excel – 在多个匹配结果中,按规定查找出第n个结果
- 2025-01-18 从入门到提高一一函数定义域
- 2025-01-18 C语言return 0一定要有吗?
- 2025-01-18 什么是0℃恒温器?
- 2025-01-18 VLOOKUP函数只能从左向右匹配查找?与IF函数搭配实现逆向查找
- 2025-01-18 TCP连接状态的多种判断方法
- 2025-01-18 吞没选股指标(选股指标)
- 05-09Linux 安装Oracle11.2.0.4 (静默安装法)
- 05-09Oracle 10g安装64位图解流程(Oracle 10g安装64位图解流程图怎么画)
- 05-09Centos7命令行安装Oracle11g(centos7安装oracle11g数据库)
- 05-09Vite 的实现原理,确实很巧妙(深入vite原理)
- 05-09微信小程序中使用云函数进行开发(微信小程序创建云函数)
- 05-09详细讲解npm install命令执行,都干了哪些事情?
- 05-09如何在 Node.js 中使用 .env 文件管理环境变量 ?
- 05-09离线环境下运行Vue项目(离线安装vue-cli)
- 最近发表
-
- Linux 安装Oracle11.2.0.4 (静默安装法)
- Oracle 10g安装64位图解流程(Oracle 10g安装64位图解流程图怎么画)
- Centos7命令行安装Oracle11g(centos7安装oracle11g数据库)
- Vite 的实现原理,确实很巧妙(深入vite原理)
- 微信小程序中使用云函数进行开发(微信小程序创建云函数)
- 详细讲解npm install命令执行,都干了哪些事情?
- 如何在 Node.js 中使用 .env 文件管理环境变量 ?
- 离线环境下运行Vue项目(离线安装vue-cli)
- 《小鑫发现》之GraphQL框架Prisma
- 如何写一个webpack插件(一)(webpack常用插件和loader)
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- js判断是否空对象 (63)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- outofmemoryerror是什么意思 (64)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)