0

我有一个包含联系信息的表格。每个都有一个类型,然后是联系信息本身。例如:

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

因此,contactcontact_ty参数后面的数字是任意的,除了它们用于将类型与关联的联系信息匹配的目的。

那么,在接收端,在 PHP 中,我如何有效地处理参数,使用数字来匹配类型和联系人?我认为最好的方法是通过正则表达式,但我能想到的最简单的函数遍历整个 $_REQUEST 数组,去掉以 开头的参数,contact然后从那里开始。

有没有更有效的方法?好像我正在编写一个手动字符串/参数解析方法,但也许有一个我根本不知道的函数可以做到这一点。由于我事先不知道表单参数的确切名称,因此我不能假设会有contact1,contact2等。

4

2 回答 2

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']}";
    }
于 2011-07-19T17:37:57.600 回答
0

迭代 $_POST 或 $_GET 是个好主意,而不是 $_REQUEST,因为它可能包含 cookie。但是,最好不要使用正则表达式。为此,您可以使用 substr。观察

foreach($_GET as $k=>$v) {
     if(strpos($Haystack, "contact") === 0) {
          //process $k
     }
}
于 2011-07-19T17:38:07.103 回答