我有一个包含联系信息的表单。每个都有一个类型,然后是联系信息本身。例如:
Type | Contact
-------------------------------
cell | 555-555-5555
home | 444-444-4444
email | abc@def.com
这是一个功能要求,用户可以使用jQuery在表单中添加/删除联系人(仅显示存在的联系信息 - 即它不是静态联系表单)。
由于用户可以在表单中添加/删除他们喜欢的任何行,因此会生成类似于以下内容的HTTP参数(数字不是连续的,可能不是连续的):
contact_ty3=cell
contact3=555-555-5555
contact_ty994=home
contact994=444-444-4444
contact_ty45=email
contact45=abc@def.com
因此,contact
和contact_ty
参数后面的数字是任意的,只是它们的目的是将类型与相关的联系信息相匹配。
那么,在接收端,在PHP中,如何有效地处理参数,使用数字来匹配类型和联系人?我认为最好的方法是通过正则表达式,但我能想到的最简单的函数遍历整个$ _REQUEST数组,去掉以contact
开头的参数,并从那里开始。 / p>
有更有效的方法吗?好像我正在编写一个手动字符串/参数解析方法,或许有一个函数可以做到这一点,我根本就不知道。由于我事先不知道表格参数的确切名称,因此我不能依赖于contact1
,contact2
等的假设。
答案 0 :(得分:1)
通过一些聪明的命名,您可以轻松地在帖子上匹配它们:
<select name="contact[3][type]">...</select>
<input name="contact[3][value]" ..>
<select name="contact[994][type]">...</select>
<input name="contact[994][value]" ..>
<select name="contact[45][type]">...</select>
<input name="contact[45][value]" ..>
在PHP中
<?php
foreach($_POST['contact'] as $id => $data){
echo "$id => type is {$data['type']}, value is {$data['value']}";
}
答案 1 :(得分:0)
迭代$ _POST或$ _GET是一个好主意,而不是$ _REQUEST,因为它可能包含cookie。但是,最好不要使用正则表达式。您可以使用substr来实现此目的。观察
foreach($_GET as $k=>$v) {
if(strpos($Haystack, "contact") === 0) {
//process $k
}
}