Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 处理任意联系人信息参数的更好方法_Php_Parsing_Httprequest_String Parsing - Fatal编程技术网

Php 处理任意联系人信息参数的更好方法

Php 处理任意联系人信息参数的更好方法,php,parsing,httprequest,string-parsing,Php,Parsing,Httprequest,String Parsing,我有一张包含联系信息的表格。每个都有一个类型,然后是联系信息本身。例如: Type | Contact ------------------------------- cell | 555-555-5555 home | 444-444-4444 email | abc@def.com 这是一项功能性要求,用户可以使用jQuery从表单中添加/删除联系人(仅显示存在的联系人信息-即,它不是静态联系人表单) 由于用户可以在表单中添加/删除他们喜欢的任何行,因此会生成类似于以

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

Type    | Contact
-------------------------------
cell    | 555-555-5555
home    | 444-444-4444
email   | abc@def.com
这是一项功能性要求,用户可以使用jQuery从表单中添加/删除联系人(仅显示存在的联系人信息-即,它不是静态联系人表单)

由于用户可以在表单中添加/删除他们喜欢的任何行,因此会生成类似于以下内容的HTTP参数(数字不是连续的,也可能不是连续的):

因此,
联系人
联系人
参数后的数字是任意的,除非它们用于将类型与相关联系人信息相匹配

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


有没有更有效的方法?似乎我正在编写一个手动字符串/参数解析方法,而可能有一个函数可以执行此操作,但我并不知道。因为我事先不知道表单参数的确切名称,所以我不能相信会有一个
contact1
contact2
,等等。

通过一些巧妙的命名,你可以很容易地在帖子上匹配它们:

<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']}";
    }

迭代$\u POST或$\u GET是个好主意,而不是$\u请求,因为它可能包含cookie。但是,最好不要使用正则表达式。为此,可以使用substr。观察

foreach($_GET as $k=>$v) {
     if(strpos($Haystack, "contact") === 0) {
          //process $k
     }
}

哦,基本上是把它们放在数组中。那很容易。谢谢
foreach($_GET as $k=>$v) {
     if(strpos($Haystack, "contact") === 0) {
          //process $k
     }
}