我正在尝试根据请求标头的内容动态构建PLSQL语句。这是用PHP编码的。 我正在使用DataTables传递一系列用于服务器端处理的参数。结果,我发送了近60个参数。 一些参数,我需要使用的参数,可以在请求中多次列出。
他们看起来像这样
oldCode=12&oldCode=14&oldCode=21&newCode=74&newCode=81
我想读取请求并填充两个数组,我将用它来构建我的where子句。而oldCode将包含12,14和21,而newCode包含74和81。
我看过filter_var_array,但它假设数组只包含特定元素,而不是像请求一样混乱。
谢谢
答案 0 :(得分:1)
使用array_reduce
构建多维数组的一种方法:
$data = "oldCode=12&oldCode=14&oldCode=21&newCode=74&newCode=81";
$result = array_reduce(explode("&", $data), function ($c, $i) {
list($k, $v) = explode("=", $i);
$c[$k][] = $v;
return $c;
}, []);
print_r($result);
如果您只对某些按键感兴趣,可以选择它们:
$filter = array_flip([ 'oldCode', 'newCode' ]);
$result = array_reduce(explode("&", $data), function ($c, $i) use ($filter) {
list($k, $v) = explode("=", $i);
if (isset($filter[$k])) $c[$k][] = $v;
return $c;
}, []);
如果您的请求看起来像oldCode[]=12&oldCode[]=14&oldCode[]=21&newCode[]=74&newCode[]=81
,那么请使用parse_str
作为AbraCadaver建议:
$data = 'oldCode[]=12&oldCode[]=14&oldCode[]=21&newCode[]=74&newCode[]=81';
parse_str($data, $result);
如果要选择某些键,请添加:
$filter = array_flip([ 'oldCode', 'newCode' ]);
$result = array_intersect_key($result, $filter);
答案 1 :(得分:0)
我不确定我是否了解数据源的性质,但是您可以更改字段的名称吗?
如果是这样,您可以更改输入的名称/ ID:
<input name="person[0][first_name]" value="john" />
<input name="person[1][first_name]" value="jack" />
或者,如果您不想为它们命名:
<input name="person[]" value="john" />
<input name="person[]" value="jack" />
然后POST这些值:
var_dump($_POST['person']);
信用: