在开发工作中php后台打印的json数据会经常出现我们意料之外的事,为了前端ajax能获取可靠地数据通常我们会对json数据进行一些处理,包括转换为数组、对象、可接受中文处理、数据转码等等。今天只谈一个我最近遇到地一个关于打印数组的问题。
我们在后端获取到一个数组数据$arr之后,通常我们会直接json_encode($arr)之后早echo或者exit截止输出。但是这样有时候会出现一些诡异地画风。
$result = $db -> getAll("SELECT id,name,state FROME table1");
$ara = array();
foreach($result as $key => $value){
if(!$value['state']) continue;
$ara['id'] = $value['id];
$ara['name'] = $value['name];
$ara['state'] = $value['state];
}
header('Content-Type: application/json');
exit(json_encode($ara));
这个时候理应返回一个json数组。但其实这样时可能会出错地,$ara是一个索引数组,经过测试当数组没有第0个元素地时候返回地数组佳将会以对象地形式返回。这时候前端是获取不到数据date地length等属性,因为返回地是对象而不是数组。
解决方法
$result = $db -> getAll("SELECT id,name,state FROME table1");
$ara = array();
foreach($result as $key => $value){
if(!$value['state']) continue;
$ara['id'] = $value['id];
$ara['name'] = $value['name];
$ara['state'] = $value['state];
}
header('Content-Type: application/json');
$ara = array_values($ara);
exit(json_encode($ara,true));
我们用array_values()函数重新排序了原数组,当然如果该数组地索引数据是有意义地就需要寻找其它地方法。
希望能对各位coder有帮助!