2012-11-27 38 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