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 接口。
立即学习“PHP免费学习笔记(深入)”;
- 不实现接口时,
json_encode()默认只序列化 public 属性,且可能输出空对象{} - 正确做法是在类里加
jsonSerialize()方法,返回可被 encode 的数组:class ArrayList implements JsonSerializable { private $items = []; public function jsonSerialize() { return array_values($this->items); // 强制输出为 JSON 数组 } } - 之后就能直接
echo json_encode($list);,无需手动调toArray()或其他方法
真正要注意的不是“选哪个函数”,而是确认数据结构是否为纯数组或实现了 JsonSerializable;json_encode() 是唯一标准入口,其余都是围绕它做清理、适配和兜底。











