You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从同名表单字段生成类似$meta_query的多维数组?

解决meta_query数组格式不匹配问题

你需要生成嵌套结构的meta_query数组(包含relation和子条件数组),但实际得到的是扁平化的、带数字后缀的字段数组。下面给你两种可行的解决方案:


方案1:调整表单字段命名(推荐)

如果可以修改前端表单的字段命名,直接把字段设置为数组格式,这样后端无需额外处理就能得到目标结构。

示例表单代码:

<!-- 关系选择 -->
<select name="meta_query[relation]">
    <option value="OR" selected>OR</option>
</select>

<!-- 第一个条件组 -->
<input type="text" name="meta_query[0][key]" value="Demo">
<input type="text" name="meta_query[0][value]" value="demo">
<select name="meta_query[0][compare]">
    <option value="=" selected>=</option>
</select>
<select name="meta_query[0][type]">
    <option value="NUMERIC" selected>NUMERIC</option>
</select>

<!-- 第二个条件组 -->
<input type="text" name="meta_query[1][key]" value="test">
<input type="text" name="meta_query[1][value]" value="tes">
<select name="meta_query[1][compare]">
    <option value="=" selected>=</option>
</select>
<select name="meta_query[1][type]">
    <option value="NUMERIC" selected>NUMERIC</option>
</select>

提交表单后,后端直接通过$_POST['meta_query']就能获取到你想要的数组结构:

$meta_query = $_POST['meta_query'];

方案2:后端重组现有扁平化数组

如果无法修改表单,只能处理现有的key1/value1格式数组,可以通过PHP代码把它转换成目标结构:

// 假设这是你获取到的原始响应数组
$raw_response = array( 
    'relation' => 'AND', 
    'key1' => 'Demo', 
    'value1' => 'demo', 
    'compare1' => '=', 
    'type1' => 'NUMERIC', 
    'key2' => 'test', 
    'value2' => 'test', 
    'compare2' => '=', 
    'type2' => 'NUMERIC' 
);

// 初始化目标meta_query数组
$meta_query = [
    'relation' => $raw_response['relation'] // 保留关系设置
];

// 遍历原始数组,重组条件组
$condition_groups = [];
foreach ($raw_response as $raw_key => $value) {
    // 匹配带数字后缀的字段(比如key1、value2)
    if (preg_match('/^([a-z]+)(\d+)$/', $raw_key, $matches)) {
        $field_name = $matches[1]; // 提取字段名:key/value/compare/type
        $group_index = (int)$matches[2] - 1; // 转成从0开始的索引
        
        // 初始化对应索引的条件组
        if (!isset($condition_groups[$group_index])) {
            $condition_groups[$group_index] = [];
        }
        $condition_groups[$group_index][$field_name] = $value;
    }
}

// 把重组后的条件组合并到meta_query
$meta_query = array_merge($meta_query, $condition_groups);

// 输出结果
print_r($meta_query);

运行结果

执行上述代码后,你会得到符合需求的数组:

Array (
    [relation] => AND
    [0] => Array (
        [key] => Demo
        [value] => demo
        [compare] => =
        [type] => NUMERIC
    )
    [1] => Array (
        [key] => test
        [value] => test
        [compare] => =
        [type] => NUMERIC
    )
)

如果需要把relation改成OR,直接修改$raw_response['relation']的值即可。


内容的提问来源于stack exchange,提问作者user9312196

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:29:47