$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
…). Там нет шансов увидеть проблемы для следующих индексов.