我有以下代码并且在函数field_has_input()中,我想将元素的键分配给错误[]
即。 errors [] = $ key而不是errors [] = $ field
从check_all_fields调用函数field_has_input($ field)($ _ POST)
希望有人可以提供帮助。
function field_has_input($field)
{
global $errors;
if(!isset($field) || empty($field))
{
$errors[]=$field;
}
}
function check_all_fields($_POST)
{
global $errors;
foreach($_POST as $key => $value)
{
echo $_POST[$key] . "<br />";
field_has_input($_POST[$key]);
}
//exit;
var_dump($errors);
return $errors;
}
答案 0 :(得分:1)
我建议你完全免除field_has_input()
函数,只需在另一个循环中完成工作。否则,您需要将$key
传递给内部函数。目前的简单性完全没有必要,增加了复杂性。
function check_all_fields($_POST)
{
global $errors;
foreach($_POST as $key => $value)
{
// empty() calls isset() implicitly...
if (empty($value)) {
$errors[] = $key;
}
}
//exit;
var_dump($errors);
return $errors;
}
此外,我建议不要使用global
错误,而是将其传递给函数。因为$_POST
是超全局,所以不必将其作为参数传递给函数。仅代替$errors
。
function check_all_fields($errors) {
// $_POST is already available here...
foreach($_POST as $key => $value)
{
if (empty($value)) {
$errors[] = $key;
}
}
return $errors;
}
如果必须使用内部函数,例如field_has_input()
中要完成的实际工作比仅检查empty()
更复杂,请传递{{1并检查函数内的$key
$_POST[$key]
答案 1 :(得分:0)
如果你想获得一个由$ _POST键组成的值数组,这些键只有一行:
$errors = array_keys( array_diff_key( $_POST, array_filter($_POST) ) );
array_filter将删除false,null或空字符串值
array_diff_key会将原始的完整帖子数组与过滤后的版本进行比较,并仅返回已过滤的密钥。
array_keys将使用给定数组的数组键创建值数组
示例,如果:
$arr = array (
'name' => 'Bob'
,'company' => ''
,'state' => 'CA'
,'phone' => ''
);
$errors = array_keys( array_diff_key( $arr, array_filter($arr) ) );
var_dump($errors);
// output:
array(2) {
[0]=>
string(7) "company"
[1]=>
string(5) "phone"
}