我有一个以下结构的数组:
Array ( [0] => Array ( [event] => event1 [Weight] => 2 )
我试着按"重量"排序。我试过这个:
function cmp($a, $b) {
if ($a['Weight'] > $b['Weight'] ){
return -1;
} else {
return 1;
}
}
但它不是按重量排序的。这似乎是我指体重的方式,但我不确定如何正确地做到这一点。
您可以这样排序:
uasort($array, function ($a, $b) {
$c = $a['Weight'];
$d = $b['Weight'];
if ($c == $d){
return 0;
}
else if($c > $d){
return 1;
}
else{
return -1;
}
});
<?php
// Obtain a list of columns
//$data = Your Array
foreach ($data as $key => $row) {
$weight[$key] = $row['Weight'];
}
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($weight, SORT_ASC, $data);
?>
我认为你的问题一定是你用来进行实际排序的函数,这里有一个如何按以太升序或降序排序的完整例子。
$array = array(
array( 'event'=> 'something', 'Weight' => 2),
array( 'event'=> 'something', 'Weight' => 1),
array( 'event'=> 'something', 'Weight' => 10),
array( 'event'=> 'something', 'Weight' => 10),
array( 'event'=> 'something', 'Weight' => 0),
array( 'event'=> 'something', 'Weight' => 1),
array( 'event'=> 'something', 'Weight' => -10),
);
function weightCmp($isAscending = true) {
return function($a, $b) use ($isAscending) {
$diff = $a['Weight'] - $b['Weight'];
return $isAscending ? $diff : $diff * -1;
};
}
usort($array, weightCmp());
var_dump($array);
usort($array, weightCmp(false));
var_dump($array);