当前位置: 代码迷 >> JavaScript >> 以允许JS区分它们的方式在PHP中创建“对象”和“数组”
  详细解决方案

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

热度:19   发布时间:2023-06-12 13:43:45.0

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

$arr = [];

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

有没有一种方法可以在PHP中创建一个空的关联数组,所以json_encode会将其转换为一个空的JS对象,也称为{} ,而不是[]

使用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);
}

您可以使用 :

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

这使我获得了预期的{}输出。

您可以仅将JSON_FORCE_OBJECT选项传递给函数。 这也将迫使所有空数组也成为对象。

JSON_FORCE_OBJECT(整数)当使用非关联数组时,输出对象而不是数组。 当输出的接收者期望对象并且数组为空时,此功能特别有用。 自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);
  相关解决方案