[英]Assign key of an array element to a variable
我有以下代码,并且在函数field_has_input()中,我想将元素的键分配给errors []
即errors [] = $ key而不是errors [] = $ field
从check_all_fields($ _ POST)调用函数field_has_input($ field)
希望有人可以帮忙。
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;
}
我建议您完全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()
更复杂,请传递$key
并在函数内部检查$_POST[$key]
function field_has_input($key, $errors) {
if (empty($_POST[$key])) {
$errors[] = $key;
}
}
如果要获取由$ _POST键组成的值数组,这些键为空,则只需一行即可:
$errors = array_keys( array_diff_key( $_POST, array_filter($_POST) ) );
array_filter将删除错误,为空或为空的字符串值
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"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.