2016-10-17 2 views
0

У меня есть эта программа:

if (!isset($_POST['foo'])) doSomeThing1(); 
else { 
    if (!array_key_exists('foo',$_POST)) doSomeThing2(); 
    else doSomeThing3(); 
} 

... но поток программа идет на 3-й случай, в противном случае с ошибкой: undefined index 'foo' (in file.php, line xxx).

Не могли бы вы объяснить, почему? Почему array_key_exists возвращает true (который приносит сценарий в 3d-файл), но впоследствии это «неопределенный индекс»?

+1

Вы пытались посмотреть ваши данные с помощью 'var_dump ($ _ POST)'? что также может помочь нам отлаживать. также - что в файле.php: xxx? код, выдающий ошибку, может иметь отношение к отладке ошибки, не так ли? –

+0

Что подразумевается под 'doSomeThing3()'? –

+0

Пожалуйста, сообщите нам, что вы ожидаете, когда есть ключ «foo» в $ _POST; Когда нет NO 'foo' в $ _POST и т. Д. –

ответ

1
if (!isset($_POST['foo'])) doSomeThing1(); 
else { 
    if (!array_key_exists('foo',$_POST)) doSomeThing2(); 
    else doSomeThing3(); 
} 

В соответствии с этим кодом, как это работает в ...

!isset($_POST['foo']) ==> возвращает true и выполняет dosomeThing1(), когда никакой 'foo' ключа в массиве $_POST

если $_POST не имеет любой ключ, он проверяет !array_key_exists('foo',$_POST)

array_key_exists('foo', $_POST) проверка наличия 'foo' ключ есть в массиве $_POST или нет. array_key_exists('foo', $_POST) такой же, как isset($_POST['foo']), поэтому он всегда выполняет doSomeThing3(), когда нет 'foo' ключ $_POST массив.

Надеюсь, это объяснение поможет.

+0

Хорошо, спасибо за ваш ответ. – user3022188