首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >“标量”PHP数组是如何在模板下工作的?

“标量”PHP数组是如何在模板下工作的?
EN

Stack Overflow用户
提问于 2019-11-13 20:31:35
回答 1查看 51关注 0票数 0

背景

这周我遇到了一个有趣的根源问题。问题在于PHP数组是如何工作的。我有一个API端点,它使用array_filter,有时返回JSON对象,有时返回JSON数组。以下是一些例子:

代码语言:javascript
代码运行次数:0
运行
复制
json_encode([0 => 1, 1 => 2, 2 => 3])

返回字符串。

代码语言:javascript
代码运行次数:0
运行
复制
"[1,2,3]"

然而,以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
json_encode([0 => 1, 2 => 2, 3 => 3])

返回字符串:

代码语言:javascript
代码运行次数:0
运行
复制
"{"0":1,"2":2,"3":3}"

我的问题

PHP在“标量”(非映射)数组的遮罩下做什么?

假设我有一个数组

代码语言:javascript
代码运行次数:0
运行
复制
[1, 2, 3]

从本质上讲,这就是“简写”的意思吗?

代码语言:javascript
代码运行次数:0
运行
复制
[0 => 1, 1 => 2, 2 => 3]

最后,json_encode如何返回JSON数组而不是JSON对象?它里面是否有业务逻辑,比如:

如果:

  • 索引从0开始
  • 索引以长度结束-1
  • 索引排序最少。
  • 相邻两个索引之间的差异总是1。

这个PHP8.0RFC会对JSON序列化程序造成潜在的破坏吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-13 20:41:25

让我们以第一个例子为例,将其与第二个示例进行比较。

代码语言:javascript
代码运行次数:0
运行
复制
json_encode([0 => 1, 1 => 2, 2 => 3]); //returns "[1,2,3]"
//versus
json_encode([0 => 1, 2 => 2, 3 => 3]); //returns "{"0":1,"2":2,"3":3}"

结果的JSON字符串是不同的,因为在第一个示例中,返回的字符串不需要跟踪数组键。这是因为它们是数字和顺序的。

在第二个示例中,键不是顺序的,因此生成的JSON字符串需要跟踪键,以便正确解码它们。

[1, 2, 3]等于[0 => 1, 1 => 2, 2 => 3]。唯一的区别是显式地声明键,这是不必要的,在没有指定键时会自动完成。(总是顺序的和数字的)

另外,json_encode()不应该返回数组或对象,它返回一个字符串。在评论中,您澄清了您的意思是"JSON对象“,但是我认为这个前提是有缺陷的,因为它从来不返回PHP数组,它总是返回一个JSON对象。结果字符串的复杂性不会改变它是一个JSON对象。

作为Miken32指出,如果您总是希望返回不太复杂(忽略键),则可以在编码之前使用array_values()。PHP将稀疏数组视为关联数组,因此它在转换为JSON时总是会生成一个对象。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58845167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档