1

次のようなソート機能があります。

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、... のインデックス順で取得されるため、リストはソートされていません。

4

1 に答える 1

0

キーの順序は注意して使用してください。JSON を転送する場合、Chrome はインデックスを再ソートしますが、Firefox はそれらをそのまま保持します。注文が守られているかどうかはわかりません。これを解決する唯一の方法は、使用することです

$array = array_values($ret)

またはコードで最後のループを次のように変更します

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

きれいな昇順を作成するためにソートした後。古いインデックスが必要な場合は、各ノードのデータ内に格納する必要があります。

于 2013-08-10T19:19:37.680 に答える