我有一个php数据收集表单,其中一些字段是必需的,一些是可选的。基本上该页面有5个输入,5个字段有10个实例。这使得一个人一次输入10个事件变得容易。需要4个字段,而1个字段是可选的。某些必填字段需要接受0作为有效条目。我对如何验证这些信息是否正确输入感到遗憾。
基本上,最终结果是5个不同的10个数组。用户不需要输入10个事件,默认情况下会显示10个事件,以备需要时使用。因此,我希望摆脱空值并检查是否填写了所有必需的值。
我还需要确保我不要只执行array_filter,因为这可能会重新排列此人输入数据的顺序。如果用户仅在第一行输入第一个值并输入了第二行的第一行所有数据,则会产生1个有效输入而不是2个无效输入。
答案 0 :(得分:0)
花了一段时间,但我写了一个能处理这个问题的函数。该函数采用2d所需数据数组和2d可选数据数组。如果成功则返回最后一个数组,如果所有必需信息都为空,则返回1,如果并非所有必需信息都匹配则返回2(某些字段是为某些字段输入的,而其他字段则不是为其他字符输入)。
//make sure all arrays have the same amount of values
function validate_arrays($req,$op) {
$req_key = array_keys($req);
$op_key = array_keys($op);
$final = array();
$check = array();
$empty = true;
$all_equal = true;
for($a = 0; $a < count($req); $a++) {
unset($data);
$data = array();
for($b = 0; $b < count($req[$req_key[$a]]); $b++) {
//check data
$test = trim($req[$req_key[$a]][$b]);
if(strcmp(trim($req[$req_key[$a]][$b]),"") == 0) {
//required is blank
array_push($data,false);
}
else {
$empty = false;
array_push($data,true);
}
}
array_push($check,$data);
}
//check if all data arrays were the same
for($a = 0; $a < (count($check)-1); $a++) {
if($check[$a] !== $check[$a+1]) {
$all_equal = false;
break;
}
}
if(!$empty) {
if($all_equal) {
//changes the arrays to match the required entries, will get rid of empty values, will keep op fields with the correct req fields
for($a = 0; $a < count($req); $a++) {
$final[$req_key[$a]] = array();
for($b = 0; $b < count($req[$req_key[$a]]); $b++) {
if($check[$a][$b] == true) {
//add data to the array
array_push($final[$req_key[$a]],$req[$req_key[$a]][$b]);
}
}
}
for($a = 0; $a < count($op); $a++) {
$final[$op_key[$a]] = array();
for($b = 0; $b < count($op[$op_key[$a]]); $b++) {
if($check[$a][$b] == true) {
//add data to the array
array_push($final[$op_key[$a]],$op[$op_key[$a]][$b]);
}
}
}
}
else {
//all required fields did not have the same amount of data
$final = 2;
}
}
else {
//all required fields were empty
$final = 1;
}
return $final;
}