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

2019-01-28 18:24:24 +08:00
 aloyuu

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

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

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

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

and

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

and

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

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

}else{

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

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

所以我问题的关键是 [我并不关心$aaa 是否存在, 或 小明是否存在] , [ 有没有必要] [isset] [判断它]
aloyuu
2019-01-28 19:04:26 +08:00
@wuqingdzx 在不关心变量是否赋值的情况下,去判断 小明是否存在,是否有背代码书写常理?
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
2019-01-28 19:24:36 +08:00
如果你担心这个问题 你可以先 isset 判断该变量是否存在 然后在控制结构进一步判断该变量是什么对象、是否为空、等于什么不就好了吗?
masker
2019-01-28 19:34:55 +08:00
empty 不好吗
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
2019-01-28 19:50:46 +08:00
if($aaa['小明'] ?? false){

}

这么判断是否赋值,不知道有没有问题呀
aloyuu
2019-01-28 20:02:40 +08:00
@littleylv 你说完我才想起来我屏蔽了 警告 , 尴尬。。。
xiaotuzi
2019-01-29 07:22:06 +08:00
array_key_exists 判断 key 是否存在,然后再判断是否有对应的值。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/531334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX