$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
…)。没有机会看到下一个索引的问题。