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

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

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

背景

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

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

返回字符串。

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

然而,以下代码:

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

返回字符串:

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

我的问题

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

假设我有一个数组

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

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

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

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

如果:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

复制
相关文章
十分钟了解 TypeScript 是如怎样工作的
本文概述了 TypeScript 的工作原理:典型的 TypeScript 项目的结构是什么?什么被编译以及怎样编译?我们如何使用 IDE 编写 TypeScript?
疯狂的技术宅
2020/05/11
1.4K0
十分钟了解 TypeScript 是如怎样工作的
标量tensor转numpy数组时在pycharm调试下显示异常「建议收藏」
最近发现了一个问题,在标量tensor转numpy数组之后,在pycharm调试的过程中,我想看一下这个数组的值,却发现显示异常。
全栈程序员站长
2022/11/02
9660
标量tensor转numpy数组时在pycharm调试下显示异常「建议收藏」
PHP7标量类型声明RFC
一、总结 该RFC建议添加4种新的标量类型声明:int,float,string和bool,这些类型声明将会和PHP原来的机制保持一致的用法。RFC 更推荐给每一个PHP文件,添加一句新的可选指令(declare(strict_type=1);),让同一个PHP文件内的全部函数调用和语句返回, 都有一个“严格约束”的标量类型声明检查。此外,在开启严格类型约束后,调用拓展或者PHP内置函数在参数解析失败,将产生一个 E_RECOVERABLE_ERROR级错误。通过这两个特性,RFC希望编写PHP能够变得更准
wangxl
2018/03/07
1.1K0
PHP7标量类型声明RFC
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息。最后由我用java实现linux上exe文件的版本号读取功能。下面是详细代码:
业余草
2019/01/21
6K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
【说站】php中的四种标量类型
一般来说,布尔型的值是FALSE和TRUE,但当运算符、函数或过程控制需要布尔型参数时,任何类型的值都可以自动转换成布尔型。以下值被认为是FALSE,其他值被认为是TURE。
很酷的站长
2022/11/23
5450
【说站】php中的四种标量类型
ASP.NET是如何在IIS下工作的
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化。 IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6
古时的风筝
2018/01/08
3K0
ASP.NET是如何在IIS下工作的
PHP | 变量、标量知识梳理与运用详析
也就是小数,可以用小数点或者科学计数法表示。 科学计数法可以使用小写的e,也可以使用大写的E。 demo:
凌川江雪
2019/02/26
1K0
PHP 数组常用操作整理,提升工作效率
躺平程序员老修
2023/09/05
2710
PHP 的数组
数组就是一组数据的集合,把一系列数据组织起来。如果变量是存储单个值的容器,那么数组就是存储多个值的容器。数组每个实体包含一个键和一个值。
小末快跑
2020/05/08
6.3K0
PHP7中标量类型declare的用法详解
这篇文章主要介绍了PHP7标量类型declare用法,结合实例形式分析了PHP7中标量类型declare的功能、特性与相关使用技巧,需要的朋友可以参考下
全栈程序员站长
2021/12/23
7140
PHP7中标量类型declare的用法详解
PHP数组函数下与二维多维数组与数组的遍历(终点篇)
把数组分割为带有两个元素的数组块:意思是我看一下,记住了呀,兄弟们,这像是二维数组一样的吧,分成两个元素两个元素的,第一个两个元素的前面是(下标0),然后是第二个两个元素的是(下标1)哈
贵哥的编程之路
2020/10/28
1.6K0
PHP数组函数下与二维多维数组与数组的遍历(终点篇)
PHP中用+号连接数组的结果是?
我们在开发中,有时候会将两个数组合并连接起来,这个时候要注意了,千万不要偷懒直接使用+号哦,为什么呢?我们看看以下代码:
硬核项目经理
2020/02/17
8980
模板(下)——(类模板)
其中,类型实参表应与该类模板中的“类型形参表”相匹配。“对象表”是定义该模板类的一个或多个对象。 例:
海盗船长
2020/08/27
2.1K0
有界数组模板类(类模板)
编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据。要求实现对数组进行排序的方法sort,及对数组进行查找的方法search。(不能直接调用C++自带的排序或查找函数)
叶茂林
2023/07/30
1560
Linux如何在CLI模式下运行php文件
Dabenshi
2023/05/26
1.5K0
PHP数组下(数组指针,与数组函数一部分)
数组指针: 一步步来哈 意思是定义一个关联数组,然后是取出第一个 a r r [ 0 ] 的 键 值 ‘ arr[0]的键值` arr[0]的键值‘val=current( a r r ) ; ‘ , 然 后 取 出 第 一 个 arr);`,然后取出第一个 arr);‘,然后取出第一个arr[0]的键名key=key(arr);,然后输出把echo key."-".
贵哥的编程之路
2020/10/28
8390
PHP数组下(数组指针,与数组函数一部分)
windows下批处理命令bat是如何工作的?
bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。
叶子陪你玩
2020/03/19
1.5K0
windows下批处理命令bat是如何工作的?
[KDD 2022 | 论文简读] 标量是不够的:基于矢量化的无偏差学习排名
Scalar is Not Enough: Vectorization-based Unbiased Learning to Rank
智能生信
2022/12/29
3730
[KDD 2022 | 论文简读] 标量是不够的:基于矢量化的无偏差学习排名
PHP 数组
本章主要介绍 PHP 数组的一些应用: <?php // 带数组下标的数组 $paper[] = "Ma"; $paper[] = "Hao"; for ($i = 0; $i < 2; ++$i)
echobingo
2018/04/25
4.6K0
PHP 数组
点击加载更多

相似问题

什么是Numpy标量和数组标量?

11

HTML模板,如PHP模板

51

标量值作为数组?PHP数组

35

动态php模板是如何工作的?

12

只有整数标量数组可以转换为标量索引,但我的标量索引候选是数组。

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文