使用' isset()'有什么意义?在这些情况下?

时间:2015-03-26 18:12:33

标签: php arrays undefined-index

$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 ] : '';

它工作正常。但我想知道为什么会这样?为什么索引在第一种情况下没有被初始化,但是当我简单地转储值时它正在被初始化?

我读到了这个“问题”,但却无法真正掌握它背后的想法。我能得到一些更简单的解释吗?

2 个答案:

答案 0 :(得分:1)

$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数组中没有相应的键。

答案 1 :(得分:0)

  

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

不,你没有。你误解了结果......你错误地在这里代表它们。

逻辑上的解释是,在第一个值的循环中,索引缺失。所以你转储,然后脚本退出(嘿,你叫die ...)。没有机会看到下一个指数的问题。