使用 array_flip 有或没有值
Using array_flip With or Without a Value
用于处理表单 $_POST 提交的代码在大多数表单上运行良好,但在一组新表单上突然崩溃。我看不出表格本身有任何区别,因为它完全基于 posted 值,我已经修复了它,但我很好奇为什么突然出现问题。
在某些情况下,特定的 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;
在原始代码中,即使未设置 $RemoveFields
,您也会调用 array_flip($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;
}
用于处理表单 $_POST 提交的代码在大多数表单上运行良好,但在一组新表单上突然崩溃。我看不出表格本身有任何区别,因为它完全基于 posted 值,我已经修复了它,但我很好奇为什么突然出现问题。
在某些情况下,特定的 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;
在原始代码中,即使未设置 $RemoveFields
,您也会调用 array_flip($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;
}