PHP没有ArrayList类型,原生用array替代;输出JSON需调用json_encode(),注意编码、键名、类型兼容等问题;自定义ArrayList类应实现JsonSerializable接口。
PHP 本身没有 ArrayList 类型,所谓 “arraylist_JSON” 实际是把 PHP 的数组(尤其是索引数组或关联数组)转成 JSON 字符串,用的是 json_encode() 函数。
为什么不能直接输出 ArrayList?
Java 里的 ArrayList 是对象,PHP 没有同名内置类;如果你在 PHP 中看到 ArrayList,大概率是自己写的类、第三方库(如 Doctrine Collections),或者误把 Java 习惯带过来了。
- PHP 原生处理列表数据靠的是
array—— 它既是索引数组,也能当“动态列表”用 - 要输出类似 Java
ArrayList.toString()那样的 JSON 格式,本质就是把 PHP 数组序列化为 JSON 字符串 - 直接调用
json_encode($arr)就是标准做法,无需额外封装
json_encode() 的常见坑和参数选择
json_encode() 看似简单,但中文乱码、null 键、浮点精度、深度限制等都会导致输出异常。
- 中文乱码?确保传入的字符串是 UTF-8 编码,否则加
JSON_UNESCAPED_UNICODE选项:json_encode($data, JSON_UNESCAPED_UNICODE) - 空数组输出为
{}而不是[]?因为 PHP 把关联键全为字符串的数组当成对象处理;想强制输出数组,用array_values($arr)重置键名再 encode - 遇到资源类型(如
mysqli_result)、闭包、循环引用会报错:json_encode(): type is not supported;需提前过滤或转换 - 默认递归深度是 512,嵌套太深会返回
false;可加JSON_PARTIAL_OUTPUT_ON_ERROR降级容错(PHP 7.3+)
如果真用了自定义 ArrayList 类,怎么输出 JSON?
假设你有一个 ArrayList 类(比如继承自 ArrayObject 或自己实现),要让它支持 JSON 输出,关键是实现 JsonSerializable 接口。