2014-09-20 64 views
-2

所以,我所做的是我有一个空阵列。json_encode在JavaScript中使用的空数组给出了一个空数组,但是如果json_enode在数组上使用某些值完成,它会给出对象?

$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'])是动态的。

+1

你能告诉我javascript数组在哪里吗? – 2014-09-20 13:25:14

+0

我已经在php文件中使用了javascript数组 ,比如 Garima 2014-09-20 13:28:27

+0

这样做 - > echo json_encode($ text ['test']); ,如果此作品请通过对此评论投票通知我; – 2014-09-20 13:29:46

回答

0

这就是json_encode如何串行化数组。如果它是一个数字且连续索引的数组,它将把它作为一个json数组进行序列化。如果数组具有非数字或数字但不是连续索引,则它会将其作为对象序列化以正确保持索引。

+0

是的。但有什么办法,所以我不必进一步检查,以确定它是一个数组还是对象。 – Garima 2014-09-20 13:32:30

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'); 
+0

是的,从0开始使它成为一个数组。谢谢......但我不能用0开始数组索引,因为即使数组的键是动态的也是随机的,在任何情况下它都不会为0。你能建议任何其他解决方案吗? – Garima 2014-09-20 13:43:43

+0

@Garima:JSON只给你两个选择:它或者是一个数组,它意味着键是隐含的,从0开始,并且连续地继续;或者它是一个对象,键必须明确给出,并且可以是任何字符串。在JSON中,无法使用不以0开头的键或稀疏数组来表示数组。你需要确保你的序列化结果是JSON数组,否则你将不得不在接收端处理一个对象。注意:在接收到这个的JavaScript中,如果你使用一个对象,你可以使用'Object.keys'来获得它的一个键的数组;可能会有用。 – 2014-09-20 13:52:23

+0

是的,我使用过: - Object.keys。但是当数组为空时,我得到一个错误。我正在接受“测试不是一个对象”。当它不是空的时候,每件事都可以正常工作。顺便说一句,谢谢你的解释.. :) – Garima 2014-09-20 18:00:13

0

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

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

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

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

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

在Javascript中,但是,其差别是很清楚的:

[1, 2, 3] 

是阵列;和

{hello: "world"} 

是一个对象。

+0

*“一个数组不能有键”*这实际上不是真的:'var a = []; a.foo =“bar”; console.log(a.foo);'显示''bar“'。普通的JavaScript数组[根本不是真正的数组](http://blog.niftysnippets.org/2011/01/myth-of-arrays.html),它们只是由具有特殊性的'Array.prototype'支持的对象我们称之为“元素”和一个特殊的“长度”属性的一类属性的行为。像所有对象一样,可以具有任意键以及我们称之为“索引”的特殊类别的键。现在* JSON *,另一方面,对数组的限制要多得多。 – 2014-09-20 13:41:32

+0

@ T.J.Crowder点,这是一个错误。我会进行编辑。 – Ashesh 2014-09-20 13:47:05

0

下面是一个关联数组:

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

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

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

您可以使用JavaScript数组常量来代替:

var text = [“abc”]; 
0

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

更改此:

echo json_encode($text); 

要:

echo json_encode($text.test); 

'测试' 是 '文本' 对象的属性,您可以访问使用 ''运算符

相关问题