所以,我所做的是我有一个空数组。
$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"对象的属性,您可以使用"."运算符访问它