2016-08-23 17 views
-1

CASE変換:PHPはURLからパラメータを取得し、配列に

私は別のページから注文品目と数量を取得しようとしているが、私はGET使用してそれを渡しているし、私は必要があります(http://foo.bar/?view=process-order&itm=1&qty=1000..を。)このパラメータを取ると、このシーケンス以下の多次元配列に変換するには:

EXPECTED:

URLは次のようになります。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]}) ywayは私が必要なものではありません。 私がPHPの多くのページを読んだとしても、ドキュメントは解決策を見つけることができません。

+0

getパラメータの代わりにSessionを使用する必要があります。 –

+0

'Expected'の3つの項目について、URLがどのように表示されるかの完全な例を書き留めてください。あなたはitmとqtyの名前を再利用したいと思う?もしそうなら、答えはもっと複雑になります。 – Forbs

+0

が更新されました。変数を連結して渡します。同じ項目を使用したくないです。 – andreaem

答えて

2

あなたの声明list($key,$val) = explode(',',$items);のみ、配列の最初の2つのアイテムを取得します助けることができるすべての

感謝。

ここで書き換えバージョン

$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); 
+0

この˙Array([0] =>配列([itm] => 2(qty)=> 2350))˙ – andreaem

+0

期待された動作であっても、ただ1つの項目を返す – andreaem

+0

申し訳ありませんが、私はparse_strが同じキーを複数回表示する。私は今、私の答えを更新しました。このバージョンをチェックしてください。 – thomasrutter

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; 
} 

これが役に立ちます。

関連する問題