【发布时间】:2011-04-21 14:42:46
【问题描述】:
在使用 unset 删除数字数组键后,我遇到了 json_encode 的奇怪行为。下面的代码应该可以清楚地说明问题。我已经从 CLI 和 Apache mod 运行它:
PHP 版本信息:
C:\Users\usr\Desktop>php -v
PHP 5.3.1 (cli) (built: Nov 20 2009 17:26:32)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
PHP 代码
<?php
$a = array(
new stdclass,
new stdclass,
new stdclass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';
printf("%s\n", json_encode($a));
unset($a[1]);
printf("%s\n", json_encode($a));
程序输出
C:\Users\usr\Desktop>php test.php
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
如您所见,$a 第一次转换为 JSON 时,它被编码为 javascript 数组。第二次(在unset 调用之后)$a 被编码为一个javascript 对象。为什么会这样?我该如何预防?
【问题讨论】:
-
+1 因为很高兴看到一个问得很好的问题。 :)
标签: php javascript json