我有这个变量$a
var_dump($a)
array(3) { [0]=> string(10) "designer" [1]=> string(8) "director" [2]=> string(10) "Freelancer"}
我发送的是ajax(jquery)
jquery的
data: 'form=<?php echo json_encode($a); ?>',
在我正在做的其他php文件中
$send = $_POST[form];
$b = json_encode($send);
$c = json_decode($b, true);
var_dump($c);
输出将是:
string(xx) "[\"designer\",\"director\",\"Freelancer\"]"
但是,echo $c[0]
显示:[
并且应该是“designer
”
任何帮助?
编辑:已经尝试过了
$send = $_POST['form'];
$c = json_decode($send, true);
var_dump($c);
output: `null`
答案 0 :(得分:2)
因为$c
实际上是字符串“[\”designer \“,\”director \“,\”Freelancer \“]”,而不是数组["designer", "director", "Freelancer"]
。您似乎在内容上json_encode
两次,json_decode
一次。
form=<?php echo json_encode($a); ?>
会对您的内容进行一次编码,
在通过电线发送之前。$send = $_POST[form];
将获得该内容(已经
json_encoded)。$b = json_encode($send);
将每秒编码相同的内容
时间。$c = json_decode($b, true);
将对其进行解码。这将使您的内容仍然编码。我不太确定第3步的重点是什么,在我看来删除它应该可以解决你的问题。
编辑:
由于您已经更新了问题,如果您尝试使用提议的解决方案,则会获得null
,根据PHP documentation for json_decode:
如果无法解码json或编码数据,则返回NULL 比递归限制更深。
你应该确保数据设置正是你想要的,因为在这种情况下我认为你的递归水平不是太深(根据你给出的数据,似乎没有任何一个) )。
答案 1 :(得分:0)
$_POST[form]
已经是JSON编码的字符串。如果再次对其进行编码,然后对其进行解码,则最终会得到相同的字符串,而不是数组。您不需要$b = json_encode($send)
。
看起来你也有魔术行情。关闭它们或按照文档清理字符串:http://www.php.net/magic_quotes
另外,引用您的数组索引!
$send = $_POST['form'];
http://www.php.net/manual/en/language.types.array.php#language.types.array.donts