在数组排序后更改索引

时间:2013-08-06 09:24:51

标签: php javascript sorting

我有一个像这样的排序函数:

function aasort ($array, $key, $order) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    if($order == "asc")
        asort($sorter);
    else
        arsort($sorter);
    foreach ($sorter as $ii => $va){
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

根据1个键值对数组进行排序。

和数组:

$mArray[]   = array(
    'id'  => $v->id,
    'count' => $v->count
);
aasort($mArray, 'count', 'desc');

我得到的数据是:

"mArray":
    {
        "1":{"id":"80","count":"2"},
        "0":{"id":"77","count":"1"}
    }

我在开发人员工具中看到的,但是当我在一些json编辑器中复制并检查时,问题是它们按索引的顺序排列

{
    "0":{"id":"77","count":"1"},
    "1":{"id":"80","count":"2"}
}

.done(function(d){
    for(var x in d.mArray){
      d.mArray[x];
    }
})

这里它的索引顺序又是0,1,......所以列表是未排序的。

1 个答案:

答案 0 :(得分:0)

谨慎使用键盘顺序: 转移JSON时,Chrome会重新排序您的索引,而Firefox会保持完整。您无法确定订单是否保留。解决这个问题的唯一方法是使用

$array = array_values($ret)

或在您的代码中将最后一个循环更改为

foreach ($sorter as $ii => $va)
    $ret[]=$array[$ii];

排序后创建一个干净的升序。如果您需要旧索引,则必须将其存储在每个节点的数据中。