2012-11-27 63 views
0

我傳遞號碼列表從頁面到PHP序列化JSON轉換JSON列表PHP數組

{"items":"[1,2,3,4]"} 

在我的網址它只是

...&items={"items":[1,2,3,4]} 

我在PHP

解碼此
$json = $_GET["items"]; 
$arr = json_decode($json, true); 

我得到一個數組

Array ([items] => [1,2,4]) 

但是,當我嘗試arr["items"]一個foreach並打印出每個值,我得到的是一個單一的值

[1,2,4] 

這是我使用迭代

foreach($res["items"] as $value) 
    echo $value; 

爲什麼代碼我沒有像

1 
2 
4 
+0

你爲什麼序列化它們的客戶端上?你爲什麼不按原樣傳遞數組? – zerkms

+0

,因爲我從來沒有使用過PHP。我怎樣才能直接從JavaScript傳遞數組到PHP? – MxyL

+1

'&items [] = 1&items [] = 2 ...' – zerkms

回答

5

仔細看看你的json字符串:

{"items":"[1,2,3,4]"} 

仔細看:

「[1,2,3,4]」

您是說項目是包含字符串:

「[1,2,3 ,4]「

刪除」,你會沒事的。

+0

啊............... – MxyL

2

您的序列化是錯誤的。應該是:

{"items":[1,2,3]} 

要JS擺脫的問題,如在使用JSON.stringify

var myData = {"items" : [1,2,3]}, 
    queryString = 'data='+encodeURIComponent(JSON.stringify(myData)); 

爲IE < 8它必須包括來自外部腳本(見here):

<!--[if lt IE 8]><script src="/js/json2.js"></script><![endif]--> 

無論如何,更容易的是將其作爲一個陣列發送:

items[0]=1&items[1]=2&items[2]=3 

這種方式,您也可以發送更復雜的結構:

data[items][0]=1&data[items][1]=2 
// on PHP side will become 
$_GET['data'] = array('items' => array(1,2)) 
+0

我的數據是以JSON格式發佈的,所以我覺得把它簡單的傳下來會比較方便JSON也是如此。 – MxyL

+0

如果你真的想在json中發送數據,那麼更安全的是使用JS的'JSON.stringify()'方法(對於IE <8,你需要包含它的https://github.com/douglascrockford/JSON-js)。 – lupatus