Какой смысл использовать isset () в этих случаях?

$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

Решение

$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

Другие решения

тогда я получаю значение правильно, без неопределенного индекса, брошенного мне в лицо.

Нет, ты не Вы неверно истолковываете результаты .. и вы ложно представляете их здесь.

Логическое объяснение состоит в том, что в цикле для первого значения индекс не отсутствует . Таким образом, вы дамп, затем сценарий выходит (эй, вы позвонили die…). Там нет шансов увидеть проблемы для следующих индексов.

0

По вопросам рекламы [email protected]