最近在为移动端的项目提供接口,数据格式都为json,不过在过程中遇到一个小问题,代码如下: 情况一: $tmp = array('a','b','c'); echo json_encode($tmp); 输出结果:['a','b','c'] 情况二: $tmp = array('a'=>'a','b'=>'b','c'=>'c'); echo json_encode($tmp); 输出结果:{'a':'a','b':'b','c':'c'} 问题出来了: 在二中,如果$tmp 可能为空的情况下,json_encode 后 输出的结果将是[]空数组 那么,这个接口在提供数据时就必须得分两种情况来考虑了: 数组为空时,接口输出的是空数组; 数组不为空时,接口输出的对象 解决方案: json_encode($tmp, JSON_FORCE_OBJECT) 不管在什么情况,接口永远输出对象,空数据及为{} 其实还有一个问题不知道原因: 在一,二两种情况中,为什么一种json_encode之后出来的是数组[],而二中出来的是对象{} 答案: 非连续的索引数组,在json_encode时都会被编码为object 这句话这么描述好像有些不妥 索引数组本来就是连贯的,应该是除了索引数组,其他数组(关联数组,多维数组)都会被编码为object。