使用';isset()';在这些情况下


What is the point of using 'isset()' in these cases?

$input是一个包含一些值的数组,我确信下面代码示例中的键存在。$points是一个字符串数组。

我只是得到了这个代码的Undefined index:(没有其他信息):

foreach ($points as $point) {
     $point_value = $input[$point];
...

但如果我把它扔掉:

foreach ($points as $point) {
     die(var_dump($input[$point]));
...

然后我得到了正确的值,而没有报告Undefined index

现在,我正在使用

$point_value = isset($input[ $point ]) ? $input[ $point ] : '';

而且效果很好。但我想知道为什么会发生这种事?为什么在第一种情况下没有初始化索引,而在我简单地转储值时它正在初始化?

我读了很多关于这个"问题"的书,但并没有真正理解它背后的想法。我能得到一些更简单的解释吗?

$points = ["n", "s", "e", "w"];
//$points = ["n", "s", "e", "w", "doesnotexist"];
$input = array("n"=>"north", "s"=>"south", "e"=>"east", "w"=>"west");
foreach ($points as $point) {
     $point_value = $input[$point];
     echo $point_value;
}

此代码运行良好。

取消注释第2行-代码会像您的代码一样中断。

因此,在您的代码中,$points数组中包含的某个字符串在$input数组中没有相应的键。

然后我得到了正确的值,而没有在我的脸上抛出未定义的索引。

不,你没有。你误解了结果。。你在这里虚假地代表他们。

逻辑解释是,在第一个值的循环中,索引是,而不是。所以你转储,然后脚本退出(嘿,你已经调用了die…)。没有机会看到下一个索引的问题。