PHP排序特定字段阵列

问题描述:

我有以下结构的阵列:PHP排序特定字段阵列

Array ([0] => Array ([event] => event1 [Weight] => 2) 

,我试图通过“权重”进行排序。我试过这个:

function cmp($a, $b) { 
    if ($a['Weight'] > $b['Weight']){ 
     return -1; 
    } else { 
     return 1; 
    } 
} 

但它不是按重量分类。这似乎是我如何称重,但我不确定如何正确地做到这一点。

+2

实际启动排序的行在哪里?必须有'usort()'之类的东西。这是一个正确的例子:https://eval.in/79635 – ComFreek

您可以这样排序是:

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