从结果数组中构建特定的查询字符串

时间:2011-12-01 19:38:07

标签: php arrays query-string

在php中我有以下数组:

$car[] = array ("id"=>"1", "brand"=>"Audi", "price"=>"7000"); 
$car[] = array ("id"=>"9", "brand"=>"Merc", "price"=>"9000");

使用此数组,我想构建以下查询字符串:

&brand0=Audi&brand1=Merc&id0=1&id1=9&price0=7000&price0=9000

我该怎么做呢?

请注意,数组可能比2行有更多的结果,因此构建的查询字符串应该能够处理它(此示例中使用的结果也可能不同)。

由于

4 个答案:

答案 0 :(得分:3)

作为替代方案,您可以使用http_build_query。为了进一步简化,我建议:

$url = http_build_query(array("car" => $car));

这将导致这样的URL参数列表:

&car[0][brand]=Audi&car[1][brand]=Merc&car[0][id]=1&car[1][id]=9&car[0][price]=7000&car[1][price]=9000

这看起来很奇怪,但允许PHP按原样重建两个数组。

答案 1 :(得分:2)

循环遍历数组,并将键值对放在另一个数组中。然后最终内爆数组。类似的东西:

$data = array();
$i = 0;
foreach ($car as $k=>$v)
{
   $data[] = $k . '_' . $i .'=' . $v;
   $i++;
}
echo implode('&', $data);

我经常使用内爆,因为AFAIK比$data +=快。

修改

实际上,上面的那个仅适用于1个阵列。这是多个数组:

$data = array();
$i = 0;
foreach ($car as $c)
{
   foreach ($c as $k=>$v);
      data[] = $k . '_' . $i . '=' . $v;
   $i++;
}
echo implode ('&', $data);

答案 2 :(得分:0)

也许不是最优雅的方式。

$str = "";
foreach($car as $key => $val){
    $str .= "$key=$val&";
}
$str = substr($str, 0, strlen($str) - 2);

答案 3 :(得分:0)

$params = array();
for($i=0;$i<count($car);$i++) {
    $params[] = 'id' . $i . '=' . $car[$i]['id'];
    $params[] = 'brand' . $i . '=' . $car[$i]['brand'];
    $params[] = 'price' . $i . '=' . $car[$i]['price'];
}
$string = implode('&', $params);

这将通过,并创建带有数字的键,然后将它们全部粘在一起,为您提供您想要的$string。它也将只是为了清洁,没有额外的&amp;如果您只是追加,可能会在开始或结束时获得。