2016-10-20 36 views
0

因此,我按降序对uasort排序了一个多维数组。我做了一个var_dump($winrateArray),它被正确排序。最高值位于第一个返回的数组中。但是,当我尝试一个var_dump($winrateArray[0][3])这是我期望的最高价值是它不存在。相反,它在$winrateArray[1][3]。我正确使用uasort吗?PHP使用uasort对数组进行排序

未排序转储:

array(2) { [0]=> array(4) { [0]=> string(2) "18" [1]=> string(1) "1" [2]=> int(0) [3]=> int(1) } [1]=> array(4) { [0]=> string(2) "31" [1]=> string(1) "1" [2]=> int(100) [3]=> int(101) } } 

排序转储:

array(2) { [1]=> array(4) { [0]=> string(2) "31" [1]=> string(1) "1" [2]=> int(100) [3]=> int(101) } [0]=> array(4) { [0]=> string(2) "18" [1]=> string(1) "1" [2]=> int(0) [3]=> int(1) } } 

具体转储:

int(1) 

$winrateArray[0][0] = '18'; 
$winrateArray[0][1] = '1'; 
$winrateArray[0][2] = 0; 
$winrateArray[0][3] = 1; 

$winrateArray[1][0] = '31'; 
$winrateArray[1][1] = '1' 
$winrateArray[1][2] = 100; 
$winrateArray[1][3] = 101; 

var_dump($winrateArray); 

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

uasort($winrateArray, 'cmp'); 

var_dump($winrateArray); 
var_dump($winrateArray[0][3]); 
+1

发布您正在使用的数据示例集合,这对我们来说很有帮助和测试。 – Clay

+0

我们需要查看数组和结果。 – PHPglue

+0

正如我看到的结果是正确的,但钥匙保存,你不想这样? – krasipenkov

回答

0

你可以这样做:

$newArray = $winrateArray; 
uasort($winrateArray, 'cmp'); 

$i = 0; 
foreach($winrateArray as $key => $item) { 
    $newArray[$i][3] = $item[3]; 
    $i++; 
} 

,之后使用新的阵列。您将保留密钥,并且您将重新排序并替换第三个元素

+0

该解决方案完美运作。我不完全理解“as $ key => $ item”在做什么,但非常感谢! – SheepBandit

+0

$ key是foreach循环(父键)中当前项的关键字,item保存给定父项的内部数组(具有3个元素的数组)。 – krasipenkov