Birkaç dizileri sıralamak için array_multisort

2 Cevap

Bunun için arandı ancak kesin cevabını bulmak için görünmüyor olabilir. Ben simultanously sıralama 3 diziler diziler 3'te sayısal değerler temelinde array_multisort kullanmak istiyorum. Temelde vb NFL / NHL sıralamalar için görmek istiyorum ne benzer bir "sıralamalar" tablosunu yapmak istiyorum I (sayısal) 3 dizileri, tempIDs (string), tempWins (sayısal), tempWinPercentage var. Ben 3 galibiyet ilk dayalı, aynı zamanda sıralama ve bir kravat varsa o zaman, yüzde kazanmak gerekir.

Ben sadece 2 diziler daha fazla çalışmak array_multisort almak için görünmüyor olabilir, bu nedenle onlar "birkaç" dizileri ile çalışmak derken belki terminolojiyi yanlış anlama var. Teşekkür ederiz!

2 Cevap

Böyle bir veri dizisi olmalıdır:

$data = array(
    0 => array(
    	'tempIDs' => 'something',
    	'tempWins' => 10,
    	'tempWinPercentage' => 50,
    ),
    1 => array(
    	'tempIDs' => 'something else',
    	'tempWins' => 10,
    	'tempWinPercentage' => 60,
    ),
    3 => array(
    	'tempIDs' => 'something more',
    	'tempWins' => 20,
    	'tempWinPercentage' => 50,
    ),
);

Sonra kullanarak sıralama bu dizi usort($data, 'my_sort_cb')

Geri arama yöntemi ilk tempWins karşılaştırmak ve eşit iseler, tempWinPercentages karşılaştırmak gerekir:

function my_sort_cb($a, $b) {
    if ($a['tempWins'] > $b['tempWins']) return 1;
    if ($a['tempWins'] < $b['tempWins']) return -1;

    if ($a['tempWinPercentage'] > $b['tempWinPercentage']) return 1;
    if ($a['tempWinPercentage'] < $b['tempWinPercentage']) return -1;
    return 0;
}

(this can be made shorter)

I can't seem to get array_multisort to work with more than just 2 arrays, so maybe I'm misunderstanding the terminology when they say that it can work with "several" arrays. Thank you!

Ben bunu daha iki dizileri sıralamak için kullanılabilir anlamına düşünüyorum, ama diğer diziler ilki dayandırarak sıralanır.

Örneğin, bu kodu çalıştırmadan

$a1 = array(12, 23, 34, 45, 45, 34);
$a2 = array(234, 56, 243, 456, 34, 346);
$a3 = array(654, 56, 8, 12, 56, 90);

array_multisort($a1, $a2, $a3);

olarak tanımlanan olurdu sanki diziler hallolacak

$a1 = array(12, 23, 34, 34, 45, 45);
$a3 = array(654, 56, 8, 90, 56, 12);