在PHP中创建“对象”和“数组”的方式允许JS区分它们

时间:2015-07-16 17:49:38

标签: javascript php arrays json

PHP创建数组(索引或assosiative)的语法是相同的,也就是

$arr = [];

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

有没有办法可以在PHP中创建一个空的assosiative数组,所以json_encode会将它转换为一个空的JS对象,即{},而不是[]

3 个答案:

答案 0 :(得分:2)

使用stdClass()

php > $x = new StdClass;
php > echo json_encode($x);
{}

当然,一旦它成为stdclass,你将无法再将其用作数组。但这至少是一种在JSON中强制空对象的方法,所以你可以用特殊的方式代码:

if (count($array) == 0) {
   $json = json_encode(new StdClass);
} else {
    $json = json_encode($array);
}

答案 1 :(得分:2)

您可以使用stdClass

$obj = new stdClass();
echo json_encode($obj);

这会让我得到预期的{}输出。

答案 2 :(得分:2)

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

  

JSON_FORCE_OBJECT(integer)输出对象而不是数组   当使用非关联数组时。特别有用的时候   输出的接收者期待一个对象,并且该数组是空的。   自PHP 5.3.0起可用。

所以:

if (empty($array)) {
    $json = json_encode([], JSON_FORCE_OBJECT);
} else {
    $json = json_encode($array);
}

在我看来,这看起来比转换对象更清晰。

甚至

$json = json_encode($array, empty($array) ? JSON_FORCE_OBJECT : 0);