$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 ] : '';
它工作正常。但我想知道为什么会这样?为什么索引在第一种情况下没有被初始化,但是当我简单地转储值时它正在被初始化?
我读到了这个“问题”,但却无法真正掌握它背后的想法。我能得到一些更简单的解释吗?
答案 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
...)。没有机会看到下一个指数的问题。