http_build_query给我获取相同名称的参数

时间:2019-06-07 15:05:49

标签: php

我正在向另一个页面发送多个参数,并且我正在使用http_build_query()来执行此操作。以下代码:

$array = array();

if(!empty($_POST['modelcheck'])){
    foreach($_POST['modelcheck'] as $selected){
        $array[] = $selected;
    }
}

$args = array
(
    'pricefrom' => $fromval,
    'priceto' => $toval,
    'model' => $array
);
    $params = http_build_query($args);
    $cleanedParams = preg_replace('/%5B(\d+?)%5D/', '', $params);


header("Location: ../page2.php?" . $cleanedParams);

给我一​​个网址:

page2.php?pricefrom=10000&priceto=60000&model=1&model=2

您可以看到模型重复了多次,我希望第一个model之后的参数为model2model3 .......等等。

我尝试将其放入for循环中

for ($i=0; $i <count($array) ; $i++) { 
    $args = array
    (
        'pricefrom' => $fromval,
        'priceto' => $toval,
        'model'.$i => $array
    );
}

但这只是给了我:

page2.php?pricefrom=10000&priceto=60000&model1=1&model1=2

3 个答案:

答案 0 :(得分:1)

您可以使用http_build_query中的第二个参数为数字键加上字符串前缀:

avg_true = K.mean(y_true)
baseline = sigmoid_loss(avg_true, y_pred)

但是,我不建议为这样的变量创建单独的名称。最好使用alter session set current_schema = prod_schema;。参见Passing arrays as url parameter

答案 1 :(得分:1)

您的原始代码没有任何问题,只是您通过调用preg_replace破坏了代码。

if(!empty($_POST['modelcheck'])){
    foreach($_POST['modelcheck'] as $selected){
        $models[] = $selected;
    }
}

$args = [
    'pricefrom' => $fromval,
    'priceto' => $toval,
    'model' => $models,
];

$params = http_build_query($args);
header("Location: ../page2.php?" . $params);

现在,在page2.php中,您仅使用$_GET['model']作为数组。

<?php
foreach ($_GET['model'] as $model) {
    printf('%s<br/>', $model);
}

答案 2 :(得分:-2)

您的$args变量应类似于:

$args = array (
    'pricefrom' => $fromval,
    'priceto' => $toval,
    'model' => $array
);

UPD

如果您想将preg_replace与多个参数一起使用,请使用http_build_query替换html特殊字符。

$query = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '[]=', http_build_query($args));

您将通过访问$_GET['model']

收到一个数组