V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
aloyuu
V2EX  ›  问与答

PHP 判断数组键值的方式 , 疑惑

  •  
  •   aloyuu · 2019-01-28 18:24:24 +08:00 · 1340 次点击
    这是一个创建于 2117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    $aaa 可能未赋值 $aaa['小明'] 可能未赋值

    这个时候,有没有必要 判断$aaa 是否存在???

    这个时候,有没有必要 $aaa['小明'] 是否存在???

    if($aaa & $aaa['小明'] & $aaa['小明'] ===1)

    and

    if($aaa & $aaa['小明'] ===1)

    and

    if($aaa['小明'] === 1)

    12 条回复    2019-01-29 07:22:06 +08:00
    littleylv
        1
    littleylv  
       2019-01-28 18:32:07 +08:00
    isset($aaa['小明']) && $aaa['小明'] ===1
    wuqingdzx
        2
    wuqingdzx  
       2019-01-28 18:39:39 +08:00
    接一楼
    isset() 判断一个变量是否存在,如果$aaa 不存在或者$aaa 不是一个数组,那么$aaa['小明']就更不可能存在了,所以返回 false。
    然后这种问题有你发帖子的时间,你就写出代码跑起来了已经得到结果。
    1762628386
        3
    1762628386  
       2019-01-28 18:52:01 +08:00
    不用的,直接 isset,千万别!empty
    isset($arr['key']){

    }else{

    }
    aloyuu
        4
    aloyuu  
    OP
       2019-01-28 18:58:17 +08:00
    @wuqingdzx 因为最终目的是判断小明是否存在且等于 1 ,不在乎$aaa 下面是否有其它键名与键值

    因为 小明等于 1,要运行事件 A , 不等于 1 则运行事件 B

    所以我问题的关键是 [我并不关心$aaa 是否存在, 或 小明是否存在] , [ 有没有必要] [isset] [判断它]
    aloyuu
        5
    aloyuu  
    OP
       2019-01-28 19:04:26 +08:00
    @wuqingdzx 在不关心变量是否赋值的情况下,去判断 小明是否存在,是否有背代码书写常理?
    littleylv
        6
    littleylv  
       2019-01-28 19:08:45 +08:00
    @aloyuu #5 不判断的话会报 warning

    话说,这发帖的时间你写个 demo 运行试一下不就知道了吗?

    ➜ ~ cat a.php
    <?php
    if ($a['key'] === 1) {
    echo '1111';
    }
    ➜ ~ php a.php
    PHP Notice: Undefined variable: a in /Users/YONG/a.php on line 2

    Notice: Undefined variable: a in /Users/YONG/a.php on line 2

    ➜ ~ cat b.php
    <?php
    $a = [];
    if ($a['key'] === 1) {
    echo '1111';
    }
    ➜ ~ php b.php
    PHP Notice: Undefined index: key in /Users/YONG/b.php on line 3

    Notice: Undefined index: key in /Users/YONG/b.php on line 3
    zhuzhibin
        7
    zhuzhibin  
       2019-01-28 19:24:36 +08:00
    如果你担心这个问题 你可以先 isset 判断该变量是否存在 然后在控制结构进一步判断该变量是什么对象、是否为空、等于什么不就好了吗?
    masker
        8
    masker  
       2019-01-28 19:34:55 +08:00 via Android
    empty 不好吗
    littleylv
        9
    littleylv  
       2019-01-28 19:41:14 +08:00
    @masker #8 empty 一般慎用,因为 0/null/‘’(空字符串) 都会被判定为 true

    比如
    $a['key'] = 0;
    !empty($a['key']) && $a['key'] === 0 => false
    isset($a['key']) && $a['key'] === 0 => true
    结果是不一样的
    hanzhao
        10
    hanzhao  
       2019-01-28 19:50:46 +08:00
    if($aaa['小明'] ?? false){

    }

    这么判断是否赋值,不知道有没有问题呀
    aloyuu
        11
    aloyuu  
    OP
       2019-01-28 20:02:40 +08:00
    @littleylv 你说完我才想起来我屏蔽了 警告 , 尴尬。。。
    xiaotuzi
        12
    xiaotuzi  
       2019-01-29 07:22:06 +08:00 via iPhone
    array_key_exists 判断 key 是否存在,然后再判断是否有对应的值。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1302 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:58 · PVG 01:58 · LAX 09:58 · JFK 12:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.