PHP从URL获取参数并转换为数组

时间:2016-08-23 00:36:42

标签: php arrays

CASE:

我试图从其他页面获取订购商品和数量,因此我使用GET(http://foo.bar/?view=process-order&itm=1&qty=1000..。)传递它,然后我必须采用此参数并转换为多维遵循以下顺序的数组:

预期:

网址为:http://foo.bar/?view=foo-bar&itm=1&qty=1000&itm=2&qty=3000&itm=3&qty=1850

[0]=>
   [itm]=>'1',
   [qty]=>'1000',
[1]=>
   [itm]=>'2',
   [qty]=>'3000',
[2]=>
   [itm]=>'3';
   [qty]=>'1850',
 etc.

CODE:

$url = $_SERVER['REQUEST_URI']; //get the URL
$items = parse_url($url, PHP_URL_QUERY); //get only the query from URL
$items = explode( '&', $items );//Explode array and remove the &
unset($items[0]); //Remove view request from array
$items = implode(",", $items); //Implode to a string and separate with commas
list($key,$val) = explode(',',$items); //Explode and remove the commas
$items = array($key => $val); //Rebuild array

实际结果:

[itm=1] => [qty=1000]

实际行为:

结果只留下数组中的第一个元素,并使其像array({[itm=1]=>[qty=1000]})一样,无论如何不是我需要的。 即使我已经阅读了很多PHP文档页面,也无法找到解决方案。

感谢所有可以提供帮助的人

2 个答案:

答案 0 :(得分:2)

您的语句list($key,$val) = explode(',',$items);只会获取数组中的前两项。

这是一个重写版本

$chunks = explode('&', $_SERVER['QUERY_STRING']);
$items = array();
$current = -1; // so that entries start at 0
foreach ($chunks as $chunk) {
  $parts = explode('=', $chunk);
  if ($parts[0] == 'itm') {
    $current++;
    $items[$current]['itm'] = urldecode($parts[1]);
  }
  elseif ($parts[0] == 'qty') {
    $items[$current]['qty'] = urldecode($parts[1]);
  }
}

print_r($items);

答案 1 :(得分:1)

这是另一个版本。我只修改了代码的底部(前4行不受影响)。

$url = $_SERVER['REQUEST_URI']; //get the URL
$items = parse_url($url, PHP_URL_QUERY); //get only the query from URL
$items = explode('&', $items );//Explode array and remove the &
unset($items[0]); //Remove view request from array

$list = array(); // create blank array for storing data
foreach ($items as $item){
    list($key, $val) = explode('=', $item);
    if ($key === 'itm')
        $list[] = ['itm' => $val];
    else // qty
        $list[count($list) - 1]['qty'] = $val;
}

希望这有帮助。