json_encode在javascript中使用的空数组给出一个空数组但是如果json_enode在数组上用一些值完成,它会给出对象吗?

时间:2014-09-20 13:24:17

标签: javascript php

所以,我所做的是我有一个空数组。

$text['test'] = array();
echo json_encode($text)

如果我json_encode它。结果是  { “测试”:[]}

如果我在javascript中使用它,则将其视为数组。 如果数组中有一些值

$text['test'] = array('1' =>'abc');
echo json_encode($text);

输出

{"test":{"1":"abc"}} 

这被视为javascript中的对象。如果我收到一个对象而不是数组,反之亦然?数组中的值($ text ['test'])是动态的。

6 个答案:

答案 0 :(得分:0)

这就是json_encode序列化数组的方式。如果它是一个数字和连续索引的数组,它将序列化为json数组。如果数组具有非数字或数字但不是连续的索引,那么它会将其序列化为对象以正确保持索引。

答案 1 :(得分:0)

由于数组中的键不是从0开始,因此PHP json_encode会将结果作为对象输出。

要获取数组,请使用0作为第一个索引:

$text['test'] = array('0' =>'abc');

或者更好:

$text['test'] = array('abc');

...并按顺序继续索引。最简单的方法可能是单独添加条目:

$text['test'] = array();
$text['test'][] = 'abc';
$text['test'][] = 'def';

或者

$text['test'] = array('abc', 'def');

答案 2 :(得分:0)

问题不是Javascript,而是PHP如何处理数组和哈希。在PHP中,像

这样的数组
$arr = array(1, 2, 3);

被视为一个数组。但是当您使用键创建数组时;

$arr = array("hello" => "world");

它隐含地变成了哈希。这确实很奇怪,会导致你在这里讨论的问题。

然而,在Javascript中,差异非常明显:

[1, 2, 3]

是一个数组;和

{hello: "world"}

是一个对象。

答案 3 :(得分:0)

关联数组始终作为对象输出。这里明确指出:http://php.net/manual/en/function.json-encode.php

答案 4 :(得分:0)

以下是一个关联数组:

    $text['test'] = array('1' =>'abc');

PHP json_encode始终将关联数组输出为对象:

    {"test":{"1":"abc"}}

您可以使用javascript数组文字:

    var text = [“abc”];

答案 5 :(得分:0)

快速修复:只需修改代码中的一行

即可

改变这个:

  echo json_encode($text);

要:

  echo json_encode($text.test);

'测试'属于' text'您可以使用'来访问的对象。'操作