gpt4 book ai didi

PHP json_encode 作为 PHP 数组 unset() 后的对象

转载 作者:IT王子 更新时间:2023-10-29 00:02:45 28 4
gpt4 key购买 nike

在使用 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 对象。为什么会这样?我该如何预防?

最佳答案

原因是你的数组有一个洞:它有索引 0 和 2,但错过了 1。JSON 不能编码有洞的数组,因为数组语法不支持索引。

您可以编码 array_values($a)相反,它将返回一个重新索引的数组。

关于PHP json_encode 作为 PHP 数组 unset() 后的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com