返回

PHP 数组编码 JSON 的微妙区别:数组与对象

php

JSON 数组与对象:编码 PHP 数组时的一点区别

背景

在处理数据交换时,JSON(JavaScript Object Notation)是一种常用的数据格式。当将 PHP 数组编码为 JSON 时,默认情况下,json_encode() 函数会将数组编码为 JSON 对象,而不是数组。这可能会让人感到困惑,尤其是当需要处理 JSON 数组时。

原因

PHP 数组既可以是关联数组(键值对),也可以是索引数组(以数字作为键)。当 json_encode() 编码一个 PHP 数组时,它使用关联数组模式,将每个数组元素视为一个键值对,其中索引充当键。

解决方法

要将 PHP 数组编码为 JSON 数组,有两种主要方法:

  1. 使用 JSON_FORCE_ARRAY 选项:

    $json_string = json_encode($array, JSON_FORCE_ARRAY);
    

    此选项强制 json_encode() 将数组编码为 JSON 数组。

  2. 使用 array_values() 函数:

    $values = array_values($array);
    $json_string = json_encode($values);
    

    array_values() 函数删除数组中的键,只留下值。然后,你可以对结果数组进行 JSON 编码。

示例

考虑以下 PHP 数组:

$array = array(
    array(
        "id" => 0,
        "name" => "name1",
        "short_name" => "n1"
    ),
    array(
        "id" => 2,
        "name" => "name2",
        "short_name" => "n2"
    )
);

使用 JSON_FORCE_ARRAY 选项编码:

$json_string = json_encode($array, JSON_FORCE_ARRAY);

使用 array_values() 函数编码:

$values = array_values($array);
$json_string = json_encode($values);

这两种方法都会生成以下 JSON 数组:

[
    {
        "id": 0,
        "name": "name1",
        "short_name": "n1"
    },
    {
        "id": 2,
        "name": "name2",
        "short_name": "n2"
    }
]

结论

在将 PHP 数组编码为 JSON 时,理解 JSON 数组和对象的差异非常重要。通过使用 JSON_FORCE_ARRAY 选项或 array_values() 函数,你可以根据需要将数组编码为 JSON 数组或对象。

常见问题解答

1. 为什么 json_encode() 默认情况下将 PHP 数组编码为对象?

json_encode() 使用关联数组模式编码 PHP 数组,将索引视为键。

2. JSON_FORCE_ARRAY 选项有什么作用?

JSON_FORCE_ARRAY 选项强制 json_encode() 将数组编码为 JSON 数组。

3. array_values() 函数有什么作用?

array_values() 函数删除数组中的键,只留下值。

4. 在什么时候需要将 PHP 数组编码为 JSON 数组?

当需要将数据交换为 JSON 数组时,例如,在处理 API 响应时。

5. 除了 JSON_FORCE_ARRAYarray_values() 之外,还有其他方法可以将 PHP 数组编码为 JSON 数组吗?

是的,你还可以使用第三方库,例如 php-json-array