Javascript PHP的JS文本数组

Javascript PHP的JS文本数组,javascript,php,arrays,Javascript,Php,Arrays,在JS中,我有以下内容: var languages = [{ language: "da" listening: "A1" }, { language: "en" listening: "B2" }]; 在PHP中,在调用$之后,我得到的结果是: array(4) { [0]=> array(1) { ["language"]=> string(2) "da" } [1]=> array(1) {

在JS中,我有以下内容:

var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];
在PHP中,在调用
$之后,我得到的结果是:

array(4) {
  [0]=>
  array(1) {
    ["language"]=>
    string(2) "da"
  }
  [1]=>
  array(1) {
    ["listening"]=>
    string(2) "A1"
  }
  [2]=>
  array(1) {
    ["language"]=>
    string(0) "en"
  }
  ...
}
我需要的是这样的东西:

array(2) {
  [0]=>
  array(2) {
    ["language"]=>
    string(2) "da",
    ["listening"]=>
    string(2) "A1"
  }
  [1]=>
  array(2) {
    ["language"]=>
    string(2) "en",
    ["listening"]=>
    string(2) "B1"
  }
}
var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];

有没有一种简单的方法可以做到这一点?我必须迭代并处理它吗?

使用
JSON。stringify
对数据结构进行编码,将结果字符串作为单个参数发送,然后用PHP中的
JSON\u decode($JSON,true)
对其进行解码

JS

var data = [
   { language: "da", listening: "A1"}, 
   { language: "en", listening: "B2"}
];
// ...
$.post(url, { data: JSON.stringify(data) }, function() { ... });
PHP

if (isset($_POST['data'])) {
  $data = json_decode($_POST['data'], true);
  // process this array of arrays
} 

使用
JSON.stringify
对数据结构进行编码,将结果字符串作为单个参数发送,然后使用PHP中的
JSON\u decode($JSON,true)
对其进行解码

JS

var data = [
   { language: "da", listening: "A1"}, 
   { language: "en", listening: "B2"}
];
// ...
$.post(url, { data: JSON.stringify(data) }, function() { ... });
PHP

if (isset($_POST['data'])) {
  $data = json_decode($_POST['data'], true);
  // process this array of arrays
} 

我想你的意思是这样的:

array(2) {
  [0]=>
  array(2) {
    ["language"]=>
    string(2) "da",
    ["listening"]=>
    string(2) "A1"
  }
  [1]=>
  array(2) {
    ["language"]=>
    string(2) "en",
    ["listening"]=>
    string(2) "B1"
  }
}
var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];
实际上有两个对象要传输到PHP,打包到一个数组中,对吗?。尝试使用JSON:

创建JSON字符串并将其发送到服务器:

$.ajax({
    url: '...',
    type: 'POST',
    data: { json: JSON.stringify(languages)}
});
在服务器端,您现在将在$_POST['json']中拥有json字符串,您可以使用以下代码对其进行解码:

json_decode($_POST['json'], true); 
获取(多维)数组,或

json_decode($_POST['json']); 
对于包含两个对象的数组

编辑

如果打开了“魔法引号”,则必须先去掉反斜杠:

json_decode(stripslashes($_POST['json']), true); 

嗯,

我想你的意思是这样的:

array(2) {
  [0]=>
  array(2) {
    ["language"]=>
    string(2) "da",
    ["listening"]=>
    string(2) "A1"
  }
  [1]=>
  array(2) {
    ["language"]=>
    string(2) "en",
    ["listening"]=>
    string(2) "B1"
  }
}
var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];
实际上有两个对象要传输到PHP,打包到一个数组中,对吗?。尝试使用JSON:

创建JSON字符串并将其发送到服务器:

$.ajax({
    url: '...',
    type: 'POST',
    data: { json: JSON.stringify(languages)}
});
在服务器端,您现在将在$_POST['json']中拥有json字符串,您可以使用以下代码对其进行解码:

json_decode($_POST['json'], true); 
获取(多维)数组,或

json_decode($_POST['json']); 
对于包含两个对象的数组

编辑

如果打开了“魔法引号”,则必须先去掉反斜杠:

json_decode(stripslashes($_POST['json']), true); 
您好,您好:

我想你应该试着做以下几点

{
    "languages": [
        {"language":"da","listening":"A1"},
        {"language":"en", "listening":"B2"}
    ]
}
您好:

我想你应该试着做以下几点

{
    "languages": [
        {"language":"da","listening":"A1"},
        {"language":"en", "listening":"B2"}
    ]
}


我从JS控制台粘贴,你是对的:一个对象数组。Christian David,我收到一个转义的
JSON字符串
,但是在运行
JSON\u decode
之后,一个
var\u dump
输出
NULL
。嗨,你能检查是否有错误吗?如果您有PHP5.3,可以使用www.php.net/json_last_error。请从$\u POST['json']中转储json字符串,可能有一些特殊字符,例如引用的斜杠?啊,所以请尝试json解码(stripslashes($\u POST['json']),true),这将删除“\”并生成有效的json字符串。编辑:选中此项以了解这些反斜杠的来源:!这成功了!现在我有了一个
数组(数组(“语言”=>string(2)…“da”,数组(),…)
我从JS控制台粘贴,你是对的:一个对象数组。Christian David,我收到一个转义的
JSON字符串
,但是在运行
JSON_decode
之后,一个
var_dump
输出
NULL
。嗨,你能检查是否有错误吗?如果你有PHP5.3,你可以使用www.php.net/JSON_last_errore从$\u POST['json']中转储json字符串,可能有一些特殊字符,例如引用的斜杠?啊,所以请尝试json解码(stripslashes($\u POST['json']),true),这应该删除“\”并生成有效的json字符串。编辑:检查此项以了解这些反斜杠的来源:!这起作用了!现在我有了一个
数组(数组)(“language”=>string(2).“da”,array(),…)
raina77ow,
json\u decode
需要一个字符串作为第一个参数,似乎
$\u POST['data']
获取为
数组
@jima:很惊讶它竟然以数组的形式出现…而不是jibberish.Raina77ow,你忘记了JSON.stringify你的数据变量当你坚持到request@user1600124没错,这里应该使用JSON.stringify;如果没有它,则使用对象数组(由编码)将改为发送。@jima检查更新的代码,奇怪的是我没有按照自己的建议,不知怎的认为jQuery无论如何都会序列化数据。)确实是这样,但是使用它自己的方法-$.param-not
JSON.stringify
,这就是为什么你得到的是数组,而不是字符串。谢谢你的建议,检查正确的答案,我必须使用
JSON解码(stripslashes($\u POST['JSON']),true)
raina77ow,
json\u decode
需要一个字符串作为第一个参数,似乎
$\u POST['data']
获取为
数组
@jima:很惊讶它竟然以数组的形式出现…而不是jibberish.Raina77ow,你忘记了JSON.stringify你的数据变量当你坚持到request@user1600124没错,这里应该使用JSON.stringify;如果没有它,则使用对象数组(由编码)将改为发送。@jima检查更新的代码,奇怪的是我没有按照自己的建议,不知怎的认为jQuery无论如何都会序列化数据。)确实是这样,但是使用它自己的方法-$.param-not
JSON.stringify
,这就是为什么你得到的是数组,而不是字符串。谢谢你的建议,检查正确的答案,我必须使用
JSON解码(stripslashes($\u POST['JSON']),true)
如果您提供这个文本输出,并且是json格式的,请记住,json最终是一个格式良好的字符串,用于您正在使用的编码中的Javascript对象表示法,您不需要在php中进行编码,如果您想使用ajax,并且您知道您将获得json输出,我建议使用方法$。jsonIt更像是一个p在PHP中解释
it
的问题。我通过
ajax
从JS发送
stuff
。问题是如何理解我在服务器上接收到的内容。因此,如果我发送JS对象,PHP会“混乱”“他们。如果我发送一个JSON,然后用PHP进行解码,我会得到与JS等价的东西,但是是用PHP。我认为你的解决方案不会解决这个问题,因为它包含的是JS对象/数组,而不是JSON(字符串)。如果你给出这个文本输出,并且是JSON格式的,请记住,在你使用的编码中,JSON最终是Javascript对象表示法的格式良好的字符串,你不需要这样做