首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中创建“对象”和“数组”,使JS能够区分它们

问在PHP中创建“对象”和“数组”,使JS能够区分它们
EN

Stack Overflow用户
提问于 2015-07-17 01:49:38
回答 3查看 36关注 0票数 1

PHP创建数组(索引的或关联的)的语法是相同的,也称为

代码语言:javascript
复制
$arr = [];

但是,json_encode会将一个空的PHP“数组”(注意引号)转换为一个空的JS数组([]),这在某些情况下是不可取的。

有没有办法在PHP中创建一个空的关联数组,这样json_encode就会把它转换成一个空的JS对象,也就是{},而不是[]。

EN

回答 3

Stack Overflow用户

发布于 2015-07-17 01:52:15

使用stdClass()

代码语言:javascript
复制
php > $x = new StdClass;
php > echo json_encode($x);
{}

当然,一旦它成为stdclass,您就不能再将其用作数组。但这至少是在JSON中强制空对象的一种方式,因此您可以对您的代码进行特殊处理:

代码语言:javascript
复制
if (count($array) == 0) {
   $json = json_encode(new StdClass);
} else {
    $json = json_encode($array);
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-17 01:52:25

您可以使用stdClass

代码语言:javascript
复制
$obj = new stdClass();
echo json_encode($obj);

这将得到预期的{}输出。

票数 2
EN

Stack Overflow用户

发布于 2015-07-17 01:55:40

您可以只将JSON_FORCE_OBJECT选项传递给json_encode函数。这将强制任何空数组也成为对象。

使用非关联数组时,

JSON_FORCE_OBJECT (integer)输出对象而不是数组。当输出的接收方需要一个对象而数组为空时,这一点尤其有用。从PHP 5.3.0开始可用。

所以:

代码语言:javascript
复制
if (empty($array)) {
    $json = json_encode([], JSON_FORCE_OBJECT);
} else {
    $json = json_encode($array);
}

在我看来,这看起来比转换对象更干净。

甚至是

代码语言:javascript
复制
$json = json_encode($array, empty($array) ? JSON_FORCE_OBJECT : 0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31461182

复制
相关文章

相似问题

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