php - php关联数组:比较相邻值
问题描述
我想检查表单中相同 2 个输入字段的多行。如果一个为空而另一个不是,则验证应该失败。
我创建了一个基于表单中的几个输入字段(e_me_id、e_md_number、e_md_id1、e_md_number1、p_me_id、p_md_number ...)的关联数组。
$pattern='(md_number|me_id)';
foreach($_POST as $field => $value) {
$success = preg_match($pattern, $field);
if ($success) {
$validate += [$field => $value];
}
}
result of validate =(
[e_me_id] => 1
[e_md_number] => 111
[e_me_id2] => 2
[e_md_number2] => 222
[p_me_id] => 10
[p_md_number] => 101010
[f_me_id] => 16
[f_md_number] => 161616
[d_me_id] => 18
[d_md_number] => 181818 )
我需要一些循环php来检查第一个/第二个是否都为空或都已填充...对于第三个/第四个、第五个/第六个...等等等等。
我尝试使用 prev($validate) 和 next($validate) 但无法使其正常工作。
任何想法或不同的方法。
提前致谢。
解决方案
您可以这样做来验证对:
// assuming this is the array generated by your code ...
$tst= array("e_me_id" => 1,"e_md_number" => 111 ,
"e_me_id2" => 2,"e_md_number2" => 222 ,
"p_me_id" => 0,"p_md_number" => 101010 ,
"f_me_id" => 16,"f_md_number" => 161616 ,
"d_me_id" => 0,"d_md_number" => 0 );
// then this will do the validation of pairs:
$keys=array_keys($tst);
for ($i=0;$i<count($tst);$i+=2)
echo "$keys[$i] and "
.$keys[$i+1]
.(empty($tst[$keys[$i]]) == empty($tst[$keys[$i+1]])?'':' DO NOT')
." pass the validation.\n";
您可以在此处查看演示:https
://rextester.com/VEMUFJ14979
我更改了一些数字以演示不同的可能情况。
==
在两个 -tests 之间使用运算符empty()
等同于使用xor
@Markus Zeller 建议的否定运算符。
编辑:
“速记 if 语句”应如下所示:
$x = (empty($tst[$keys[$i]]) == empty($tst[$keys[$i+1]])?'':$fieldname);
$x
尽管对我来说,您的意图和$fieldname
在您的循环中还不是很清楚for
。这将设置$x
为''
如果 case 两个测试值都为空或两者都“填充”,并且它将设置为$fieldname
只有其中一个为空。
您最近的评论使我相信您希望在 $x 中获得整体验证结果。为了得到这个,你必须在循环对时计算所有错误。像下面这样的东西应该这样做:
for ($i=0,$x=0;$i<count($tst);$i+=2){
if (empty($tst[$keys[$i]]) != empty($tst[$keys[$i+1]])) $x++;
// echo $keys[$i].", error count so far: $x\n";
}
echo ("here ".($x?'validation error!':'OK'));
在此处查看演示:https ://rextester.com/XTK88037
推荐阅读
- c - realloc,用于 C 中的字符串数组
- android - 您需要使用 OKHTTP3 以 JSON 格式发布请求 - Android
- javascript - 使用 javascript 在 div 中查找链接并转到它
- reactjs - 基于 .env 配置变量渲染基础组件
- django - 无法使用 Django 启动主管
- azure - 间歇性天蓝色 403.14
- python - 将 Groupedby 对象转换为 DataFrame 或系列,无需操作
- python - 在虚拟环境中收到提及 miniconda 的错误消息
- node.js - Google Actions SDK 对话中的第二个请求失败并显示“TypeError:标准不是函数”
- java - 如何在流中使用两个过滤器进行不同的转换