lee*_*ers 21 javascript php json
json_encode
删除数字数组键后,我遇到奇怪的行为unset
.以下代码应该可以清楚地解决问题.我从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
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
节目输出
C:\Users\usr\Desktop>php test.php
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
Run Code Online (Sandbox Code Playgroud)
如您所见,第一次$a
转换为JSON,它被编码为javascript数组.第二次(在unset
调用之后)$a
被编码为javascript对象.为什么这样,我该如何预防呢?
zne*_*eak 19
原因是你的数组中有一个洞:它的索引为0和2,但是未命中1. JSON不能编码带孔的数组,因为数组语法不支持索引.
您可以编码array_values($a)
,它将返回一个重建索引的数组.
除了该array_values
技术之外,还可以array_splice
在一个步骤中使用和删除元素并重新编制索引:
unset($a[1]);
Run Code Online (Sandbox Code Playgroud)
代替:
array_splice($a, 1, 1);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3655 次 |
最近记录: |