json_encode javascript中使用的空数组给出一个空数组,但如果json_enode在具有某些值的数组上


json_encode an empty array used in javascript gives an empty array but if json_enode is done on array with some values, it gives object?

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

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

如果我json_encode它。结果是 {"test":[]}

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

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

输出为

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

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

这就是

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

因为数组中的键不是从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');

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

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

$arr = array(1, 2, 3);

被视为数组。但是当你创建一个带有键的数组时;

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

它隐式成为哈希。这确实很奇怪,会导致您在这里谈论的问题。

然而,在Javascript中,区别非常明显:

[1, 2, 3]

是一个数组;和

{hello: "world"}

是一个对象。

下面是一个关联数组:

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

PHP json_encode总是将关联数组输出为对象:

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

你可以改用javascript Array文字:

    var text = [“abc”];

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

更改此设置:

  echo json_encode($text);

自:

  echo json_encode($text.test);
">

test"是"text"对象的属性,您可以使用"."运算符访问它