2009-12-21 75 views
0

我已经搜索了这个,但似乎无法找到确切的答案。我想使用array_multisort基于3个数组中的数值同时对3个数组进行排序。基本上我想要制作一个类似于NFL/NHL排名等级的“积分榜”表。我有3个数组,tempIDs(字符串),tempWins(数字),tempWinPercentage(数字)。我需要首先根据胜利同时排序所有3个,然后如果有平局,赢得比例。array_multisort排序几个阵列

我似乎无法让array_multisort与多于两个数组一起工作,所以也许我误解了术语,当他们说它可以与“几个”数组一起工作时。谢谢!

回答

5

你应该有一个数据数组是这样的:

$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, 
    ), 
); 

然后使用usort($data, 'my_sort_cb')

您的回调方法应该先比较tempWins这个数组排序,如果相等,比较tempWinPercentages:

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; 
} 

(这可以缩短)

+0

你会得到数组排序的,谢谢!这工作完美。 – mjdth 2009-12-21 02:41:16

1

我似乎无法在array_multisort得到 工作,不仅仅是2个数组,所以 也许我误解了 术语时,他们说,它可以用 “几个”阵列工作。谢谢!

我认为他们的意思是它可以用于排序两个以上的数组,但其他数组将基于第一个排序。

在例子中,执行此代码

$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); 

仿佛会被定义为

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