使用带有或不带有值的array_flip

时间:2019-01-26 00:41:29

标签: php arrays array-flip

用于处理$ _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));

相同的代码,但带有$ filteredarray值的条件:

// 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 :(得分:1)

在原始代码中,即使未设置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;
}