Tôi đang sử dụng usort để sắp xếp mảng có mảng liên kết trong mỗi phần tử.PHP usort reorders mảng giá trị sắp xếp giống nhau cho tất cả
Khi tất cả các giá trị tôi sắp xếp trong mảng đều giống nhau thì nó vẫn thay đổi vị trí của các phần tử trong mảng, có cách nào để ngăn chặn điều này không?
Ví dụ này:
array(
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
Có thể được thay đổi như sau:
array(
array('name' => 'Josh', 'authn_weight' => 85.3),
array('name' => 'Ben', 'authn_weight' => 85.3),
array('name' => 'Fred', 'authn_weight' => 85.3)
);
Đây là chức năng sắp xếp:
private function weightSortImplementation($a, $b){
$aWeight = $a['autn_weight'];
$bWeight = $b['autn_weight'];
if ($aWeight == $bWeight) {
return 0;
}
return ($aWeight < $bWeight) ? 1 : -1;
}
Tôi đã kiểm tra rằng weightSortImplementation
chức năng luôn luôn là trở về 0 cho thấy chúng giống nhau. Vậy tại sao điều này vẫn sắp xếp lại mảng?
Đó là một vấn đề thú vị. Tôi vừa kiểm tra điều này, và sau khi sử dụng 'usort' lệnh đã được đảo ngược. http://codepad.org/PRFpq8Ug –
Chúng không được sử dụng [loại ổn định] (http://en.wikipedia.org/wiki/Sorting_algorithm#Stability), không đảm bảo thứ tự các phần tử nếu chúng là công bằng. – JoeyJ