创建“objects"和“;arrays"以一种允许JS区分它们的方式在PHP中

Creating "objects" and "arrays" in PHP in a way that would allows JS to distinguish between them

本文关键字:quot JS PHP 方式 arrays objects 一种 创建      更新时间:2023-09-26

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

$arr = [];

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

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

您可以使用stdClass:

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

这就得到了预期的{}输出。

使用stdClass():

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

当然,一旦它成为标准类,你就不能再把它当作数组来使用了。但这至少是在JSON中强制使用空对象的一种方法,因此您可以对代码进行特殊处理:

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

您可以将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);