Urutkan array dan pertahankan nilai kunci

Saya memiliki array yang terlihat seperti ini:

Array
(
    [team1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    [team2] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    ... many more teams
)

dan saya ingin mengurutkan tim berdasarkan jumlah poin yang dimiliki masing-masing tim. Saya sudah mencoba ini:

function sort_by_points($a,$b)
{
    if ($a['points']==$b['points']) return 0;
        return ($a['points']<$b['points'])?1:-1;
}

usort($this->wordswithdata, "sortbycount");

Namun pendekatan itu mengesampingkan kunci yang berisi nama tim dan pengembalian:

Array
(
    [0] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    [1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    etc...
)

Apakah ada cara untuk mengurutkan array tanpa menimpa nama tim sebagai kunci array?


person acrmuui    schedule 02.04.2013    source sumber


Jawaban (5)


Gunakan fungsi uasort, yang akan menjaga asosiasi nilai key => tetap utuh.

(catatan tambahan: Anda dapat melakukan return $a['points'] - $b['points'] alih-alih if)

person complex857    schedule 02.04.2013

Anda dapat menggunakan uasort:

uasort($array, function($a, $b) {
    return $a['points'] - $b['points'];
});

Fungsi ini mengurutkan array sedemikian rupa sehingga indeks array mempertahankan korelasinya dengan elemen array yang dikaitkan dengannya, menggunakan fungsi perbandingan yang ditentukan pengguna.

person Shoe    schedule 02.04.2013

Anda dapat mengurutkan array Asosiatif berdasarkan nilainya seperti ini

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

function Ascending($a, $b) {   
    if ($a == $b) {        
        return 0;
    }   
        return ($a < $b) ? -1 : 1; 
}  

function Descending($a, $b) {   
    if ($a == $b) {        
        return 0;
    }   
        return ($a > $b) ? -1 : 1; 
}  


echo "Ascending order" ;
uasort($age,"Ascending");
print_r($age);


echo "</br>Descending order" ;
uasort($age,"Descending");
print_r($age);
person Aylian Craspa    schedule 22.07.2018

Coba kode ini semoga berhasil.

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

aasort($your_array,"points");
person Praveen kalal    schedule 02.04.2013

person    schedule
comment
Terima kasih atas cuplikan kode ini, yang mungkin memberikan bantuan terbatas dan langsung. Penjelasan yang tepat akan sangat meningkatkan nilai jangka panjangnya dengan menunjukkan mengapa ini merupakan solusi yang baik untuk masalah tersebut dan akan membuatnya lebih bermanfaat bagi pembaca di masa depan dengan pertanyaan serupa lainnya. Harap edit jawaban Anda untuk menambahkan beberapa penjelasan, termasuk asumsi yang Anda buat. - person Capricorn; 30.07.2018