2

私は現在、連想多次元配列に変換された JSON を使用するプロジェクトに取り組んでおり、いくつかの問題があります。私の配列は次のようになります。

Array
(
    [IS-4] => Array
    (
        [0] => Array
            (
                [player] => Bulgerian_Soldier
                [dmg] => 241138
                [battles] => 113
                [avg_dmg] => 2134
            )

        [1] => Array
            (
                [player] => Lt_Towerladder
                [dmg] => 106841
                [battles] => 52
                [avg_dmg] => 2055
            )

        [2] => Array
            (
                [player] => Timroden
                [dmg] => 1090983
                [battles] => 686
                [avg_dmg] => 1590
            )

        [3] => Array
            (
                [player] => wunahokalugi
                [dmg] => 235883
                [battles] => 129
                [avg_dmg] => 1829
            )

        [clan_avg_dmg] => 1709
    )...

私がやろうとしているのは、 内のすべての配列をソートすることですが、成功IS-4avg_dmgていません。以下を使用して、すべてのデータをソートしています。

$tanks_dd = array();

foreach($tanks as $tankname => $tank) {
$tanks_dd[$tankname] = array(); 


$dmg_max = 0;   
$total_dmg = 0;
$battles = 0;

for($i=0; $i < count($tank); $i++) {        
    $player = $tanks[$tankname][$i];

    if($player['avg_dmg'] > $dmg_max) {
        $dmg_max = $player['avg_dmg'];
        array_unshift($tanks_dd[$tankname], $tanks[$tankname][$i]);
    } else {
        array_push($tanks_dd[$tankname], $tanks[$tankname][$i]);    
    }
    $total_dmg = $total_dmg + $player['dmg'];
    $battles = $battles + $player['battles'];
}
$tanks_dd[$tankname]['clan_avg_dmg'] = $battles == 0 ? 0 : round($total_dmg / $battles);
}
4

1 に答える 1

3

php の usort を使用する必要があります。

http://www.php.net/manual/en/function.usort.php

$tanks_dd['IS-4'] の内容を 'avg_dmg' で並べ替えるだけなので、次のコードでそれを行う必要があります。

usort($tanks_dd['IS-4'],function($a,$b){
    return $a['avg_dmg']>$b['avg_dmg'];
});
//$tanks_dd['IS-4'] is now sorted by avg_dmg
于 2013-05-02T04:37:29.210 に答える