【问题标题】:Seeking efficient way to pull specific vars from request into an array寻求将特定变量从请求中提取到数组中的有效方法
【发布时间】:2017-08-16 17:19:38
【问题描述】:

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

谢谢

【问题讨论】:

标签: php arrays datatable xmlhttprequest


【解决方案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,则按照 AbraCadaver 的建议使用 parse_str

$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);

【讨论】:

  • Casimir - 这让我非常接近,但并不完全。由于我的请求标头字符串,我在 newCode 中获取数据,但在 oldCode 中没有。看起来是这样的,抱歉第一次没有抓到,但是它返回了oldCode[]=1&oldCode[]=2&newCode=4。如果我添加多个项目,则包括括号。
  • 借助 Casimar 的解决方案,我能够为我的问题提出一个完整的解决方案。非常感谢
  • @AllanL:我添加了实现“正常”请求的方法(即用括号表示重复的 var 名称)。
【解决方案2】:

我不确定我是否了解您的数据源的性质,但您能更改字段名称吗?

如果是这样,您可以更改输入的名称/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" />

然后发布这些值:

var_dump($_POST['person']);

学分:

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

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多