【问题标题】:Build a specific querystring from an array of results从结果数组构建特定的查询字符串
【发布时间】:2011-12-01 19:38:07
【问题描述】:

在 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 行,因此构建的查询字符串应该能够处理它(本示例中使用的结果也可能会有所不同)。

谢谢

【问题讨论】:

    标签: php arrays query-string


    【解决方案1】:

    作为替代方案,您可以使用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 按原样重建您的两个数组。

    【讨论】:

    • 还会让您在脚本中处理它变得更加容易。
    • 不错,不知道这个:)
    【解决方案2】:

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

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

    我通常使用 implode,因为 AFAIK 它比 $data += 更快。

    编辑

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

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

    【讨论】:

      【解决方案3】:
      $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。它也不会有额外的 & 在开头或结尾,如果你只是追加,你可能会得到。

      【讨论】:

        【解决方案4】:

        也许不是最优雅的方式。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多