PHP按数组中的特定字段排序


PHP Sort by Specific Field in Array

我有一个以下结构的数组:

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