保留PHP数组中的插入顺序

时间:2015-03-30 14:40:01

标签: php arrays json

我有一个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)

4 个答案:

答案 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

参考:MySQL Sorting

答案 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为数字索引。