PHP排序特定字段阵列
问题描述:
我有以下结构的阵列:PHP排序特定字段阵列
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);
实际启动排序的行在哪里?必须有'usort()'之类的东西。这是一个正确的例子:https://eval.in/79635 – ComFreek