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文档页面,也无法找到解决方案。
感谢所有可以提供帮助的人
答案 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;
}
希望这有帮助。