弱类型语言的php对于 0 、"0"、"000" 、"00" 判断与处理问题

2022-10-11 20:37:01 175 0
魁首哥

问题分析:

  当您的变量出现0 、”0″、”000″ 、”00″ 等字符时,由于代码不严谨的时 出现的问题

解决办法

  对不同类型的变量需要注意变量的使用场景与逻辑 进行特殊处理与逻辑判断

弱类型语言的php对于 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

收藏
分享
海报
0 条评论
175
上一篇:Java工程师通宵都要看完这几本阿里P8都强烈推荐的Java电子书 下一篇:JAVA概述、Tomcat部署、Tomcat配置文件介绍

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码