PHP用uasort排序数组

时间:2016-10-20 04:38:58

标签: php sorting

所以我按降序排序了一个带有uasort的多维数组。我做了var_dump($winrateArray)并且排序正确。最高值位于第一个返回的数组中。然而,当我尝试var_dump($winrateArray[0][3])时,我期望最高值,而不是那里。而是在$winrateArray[1][3]。我正确使用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 个答案:

答案 0 :(得分:0)

你可以这样做:

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

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

然后使用新数组。您将保留密钥,您将重新排序并仅替换第3个元素