我有一个Ajax调用使用的PHP页面,我希望将一个有序的项目列表作为JSON返回。无论我在查询的'order by'子句中使用哪个字段,数组总是按其密钥ID字段排序。
有没有办法保留PHP数组中每个项的插入顺序?
这是生成JSON数组的代码:
$Soggetti = array();
while($row = $db->fetch_array($query))
{
$Soggetti[$row['ID']] = array();
$Soggetti[$row['ID']]['Denominazione'] = $row['Denominazione'];
$Soggetti[$row['ID']]['Indirizzo'] = $row['Indirizzo'].','.$row['Comune'].', '.$row['Provincia'];
$Soggetti[$row['ID']]['Superficie'] = $row['Superficie'];
$Soggetti[$row['ID']]['Lat'] = $row['Lat'];
$Soggetti[$row['ID']]['Lng'] = $row['Lng'];
$Soggetti[$row['ID']]['Tipologia'] = $row['Tipologia'];
$Soggetti[$row['ID']]['CodiceIscrizione'] = $row['CodiceIscrizione'];
$Soggetti[$row['ID']]['Visitato'] = intval($row['Visitato']);
}
echo json_encode($Soggetti)
答案 0 :(得分:1)
如果问题在于解释JSON的位置,在客户端中,您可以使用此语法返回JSON 数组(括在[]
中)而不是JSON 对象(括在{}
)。
echo json_encode(array_values($Soggetti));
答案 1 :(得分:0)
问题可能在于您的mysql查询,请尝试:
select * from table_name order by ID asc
答案 2 :(得分:0)
您需要MySQL语句的ORDER BY
子句。
在这种情况下,您希望按您的ID排序,并按升序排序,所以;
SELECT * from your_table ORDER BY id ASC
答案 3 :(得分:0)
您正在构建一个二维数组,第一维上的键是id。假设id
是数字,您将最终得到JSON中的嵌套对象,顶级键是数字id值。这里的问题是对象属性无法保证顺序。
要获得查询结果的顺序,只需在结果集循环中构建一个一维数组,如下所示:
$tempArray = array();
$tempArray['ID'] = $row['ID'];
$tempArray['Denominazione'] = $row['Denominazione'];
$tempArray['Indirizzo'] = $row['Indirizzo'].','.$row['Comune'].', '.$row['Provincia'];
$tempArray['Superficie'] = $row['Superficie'];
$tempArray['Lat'] = $row['Lat'];
$tempArray['Lng'] = $row['Lng'];
$tempArray['Tipologia'] = $row['Tipologia'];
$tempArray['CodiceIscrizione'] = $row['CodiceIscrizione'];
$tempArray['Visitato'] = intval($row['Visitato']);
$Soggetti[] = $tempArray;
将根据结果集中的顺序将JSON编码为JSON作为对象数组,数组以0为数字索引。