寻求有效的方法将特定变量从请求拉入数组

时间:2017-03-23 22:29:05

标签: php arrays datatable xmlhttprequest

我正在尝试根据请求标头的内容动态构建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,但它假设数组只包含特定元素,而不是像请求一样混乱。

谢谢

2 个答案:

答案 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']);

信用:

http://php.net/manual/en/reserved.variables.post.php#87650