php没有arraylist,实际是普通数组或类库封装结构;老版本json_encode()存在兼容性问题,需检查扩展和配置,可用fallback函数替代;调试用var_dump(),输出json需注意unicode处理。

PHP里没有arraylist,别被Java术语带偏了
PHP原生没有 ArrayList 这个类型——那是Java的。你实际拿到的,大概率是普通PHP数组(array),或者某个类库封装的类似结构(比如Laravel的 Collection)。直接用 print_r() 或 var_dump() 看结构,比猜名字更可靠。
常见误操作:
– 写 $list = new ArrayList(); → 报错 Class 'ArrayList' not found
– 试图调用 $list->add() → 方法不存在
老PHP版本(如5.3/5.4)不支持json_encode()怎么办
PHP 5.2.0 就已内置 json_encode(),真正“不支持”的情况,通常是:启用了 json 扩展但被禁用(disable_functions=json_encode,json_decode),或系统级禁用。先确认真实原因:
- 运行
php -m | grep json查扩展是否加载 - 检查
phpinfo()中disable_functions配置 - 执行
function_exists('json_encode')返回false才算真缺失
若确认不可用,可用轻量兼容方案:
立即学习“PHP免费学习笔记(深入)”;
// 简单 assoc array → JSON 字符串(仅支持 UTF-8 字符串 + 数字 + null/true/false)
function fallback_json_encode($data) {
if (is_null($data)) return 'null';
if ($data === true) return 'true';
if ($data === false) return 'false';
if (is_numeric($data)) return (string)$data;
if (is_string($data)) return '"' . str_replace(['"', '\', "
", "
", " "], ['"', '\\', '
', '
', ' '], $data) . '"';
if (is_array($data)) {
$items = [];
$is_assoc = array_keys($data) !== range(0, count($data) - 1);
foreach ($data as $k => $v) {
$val = fallback_json_encode($v);
$key = $is_assoc ? fallback_json_encode((string)$k) : '';
$items[] = $is_assoc ? "$key:$val" : $val;
}
$bracket = $is_assoc ? '{' : '[';
return $bracket . implode(',', $items) . ($is_assoc ? '}' : ']');
}
return 'null';
}输出数组内容时,别只用echo,要看清数据结构
直接 echo $arr 会输出 Array 字符串,毫无意义。根据用途选对方法:
- 调试看结构 → 用
var_dump($arr)(带类型和长度)或print_r($arr, true)(返回字符串,可写日志) - 前端需要JSON → 先确认
json_encode()可用;若不可用,用上面的fallback_json_encode(),但注意它不处理资源、对象递归、Unicode转义等边界情况 - 生成HTML表格或列表 → 手动遍历,避免直接输出未过滤的数组值(XSS风险)
- 写入文件或日志 → 用
json_encode($arr, JSON_UNESCAPED_UNICODE)(PHP ≥5.4)保留中文,老版本只能靠urlencode()或自定义编码
兼容性陷阱:json_encode()在老版本里默认不转中文
PHP 5.4 之前,json_encode() 会把中文转成 uXXXX,看着像乱码。这不是bug,是RFC标准行为,但前端解析没问题。如果非要明文中文,且确定环境是UTF-8:
- PHP ≥5.4:加
JSON_UNESCAPED_UNICODE标志 - PHP json_encode($arr).str_replace('u', '', json_encode($arr)) 不行——得先解码再重编码,实操中更推荐用上面的 fallback 函数并手动处理字符串
- 更稳妥做法:保持 u 转义,前端
JSON.parse()完全能正确还原中文
真正容易被忽略的是错误静默:老版本 json_encode() 遇到资源类型(如 mysqli_result)或循环引用,直接返回 false,不报错也不提示。务必用 === false 判断结果,并配合 json_last_error()(PHP ≥5.3)查具体原因。











