Использование array_flip со значением или без него - PullRequest
0 голосов
/ 26 января 2019

Код, используемый для обработки отправленных форм $ _POST, хорошо работает на большинстве форм, но неожиданно сломался на новом наборе форм. Я не вижу никакой разницы в самих формах, поскольку они основаны исключительно на опубликованных значениях, и я исправил их, но мне любопытно, почему возникла внезапная проблема.

В некоторых случаях конкретные значения записей не нужно обрабатывать, а те, когда они не нужны, находятся в $ RemoveFields в виде списка через запятую, который преобразуется в массив и в одном наборе форм. не имеет значения, имеет ли $ RemoveFields какое-либо значение или нет, но в другом наборе он вылетает, когда пуст.

Добавив условное выражение, я смог заставить его работать, но кто-нибудь может сказать мне, в чем проблема с исходным кодом? И старое и новое ниже. Первый работает только на некоторых формах, а второй работает на всех.

Оригинальный код:

// Remove unneeded fields specified in $RemoveFields variable
if (isset($RemoveFields) && !is_array($RemoveFields)) $RemoveFields = array($RemoveFields);
$filteredarray = array_diff_key($_POST, array_flip($RemoveFields));

Тот же код, но с условным значением для $ Filterarray:

// Remove unneeded fields specified in $RemoveFields variable
if (isset($RemoveFields) && !is_array($RemoveFields)) $RemoveFields = array($RemoveFields);
$filteredarray = (isset($RemoveFields)) ? array_diff_key($_POST, array_flip($RemoveFields)) : $_POST;

1 Ответ

0 голосов
/ 26 января 2019

В исходном коде вы вызываете array_flip($RemoveFields), даже если $RemoveFields не установлено.Это терпит неудачу, потому что аргумент array_flip() должен быть массивом.

Вы должны использовать isset() для защиты обеих строк кода:

if (isset($RemoveFields)) {
    if (!is_array($RemoveFields)) {
        $RemoveFields = array($RemoveFields);
    }
    $filteredarray = array_diff_key($_POST, array_flip($RemoveFields));
} else {
    $filteredarray = $_POST;
}
...