【发布时间】:2019-01-26 00:41:28
【问题描述】:
用于处理表单 $_POST 提交的代码在大多数表单上运行良好,但在一组新表单上突然中断。我看不出表单本身有任何区别,因为它完全基于发布的值,我已经修复了它,但我很好奇为什么会突然出现问题。
在某些情况下,不处理特定的 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是一个逗号分隔的值,你不应该用explode()把它变成一个数组吗? -
如果
$RemoveFields没有设置,第二行会尝试做array_flip(null),无效。 -
@Barmar 这只是一个长得多的函数的 sn-p,可能在这里简化了一点,但描述表明 $RemoveFields 最终是一个数组,如果它有任何值的话.至于 array_flip(null) 不起作用,这是有道理的,这就是为什么作为 $RemoveFields 没有价值的某些形式的问题,其中大多数形式仍然有效。是不是 array_flip 得到的不是 null,比如 0,如果是这样,它还会抛出错误吗?
标签: php arrays array-flip