我的问题是关于运动表。我正在使用不同的数据库请求为每个团队构建一个数组。这看起来像:
Array(
[team_id] => 1
[punkte] => 9
[fairness] => 5
[tore_diff] => 3
[tore_erzielt] => 6
)
现在每组有4个或6个这样的阵列。我的想法是把它放在一个嵌套数组中:
然后我有一个这样的数组:
Array
(
[0] => Array
(
[team_id] => 1
[punkte_s] => 6
[fairness] => 5
[tore_diff] => -1
[tore_erzielt] => 6
)
[1] => Array
(
[team_id] => 2
[punkte_s] => 1
[fairness] => 3
[tore_diff] => -5
[tore_erzielt] => 2
)
[2] => Array
(
[team_id] => 3
[punkte_s] => 9
[fairness] =>
[tore_diff] => 12
[tore_erzielt] => 15
)
[3] => Array
(
[team_id] => 4
[punkte_s] => 1
[fairness] =>
[tore_diff] => -6
[tore_erzielt] => 1
)
)
依此类推我尝试按照这样排序:
foreach ($group as $key => $row) {
$team_id[$key] = $row['team_id'];
$punkte_s[$key] = $row['punkte'];
$fairness[$key] = $row['fairness'];
$tore_diff[$key] = $row['tore_diff'];
$tore_erzielt[$key] = $row['tore_erzielt'];
};
array_multisort($punkte_s, SORT_DESC, $fairness, SORT_DESC, $tore_diff, SORT_DESC, $tore_erzielt, SORT_DESC, $group);
但它没有改变。我的错在哪里?
答案 0 :(得分:0)
您可以通过多种方式使用usort()
或array_multisort()
。我会示范一些。我喜欢第4种技巧的简洁性,但是它要求您的输入结构始终反映您希望排序的列顺序。
使用usort()
对DESC进行排序时,在左侧写上$b
值,在右侧写上$a
值。
代码:(Demo)
$array1 = $array2 = $array3 = $array4 = [
['team_id' => 1, 'punkte_s' => 6, 'fairness' => 5, 'tore_diff' => -1, 'tore_erzielt' => 6],
['team_id' => 2, 'punkte_s' => 1, 'fairness' => 3, 'tore_diff' => -5, 'tore_erzielt' => 2],
['team_id' => 3, 'punkte_s' => 9, 'fairness' => null, 'tore_diff' => 12, 'tore_erzielt' => 15],
['team_id' => 4, 'punkte_s' => 1, 'fairness' => null, 'tore_diff' => -6, 'tore_erzielt' => 1]
];
array_multisort()
,其中有array_column()
个呼叫:
array_multisort(
array_column($array1, 'punkte_s'), SORT_DESC,
array_column($array1, 'fairness'), SORT_DESC,
array_column($array1, 'tore_diff'), SORT_DESC,
array_column($array1, 'tore_erzielt'), SORT_DESC,
$array1
);
var_export($array1);
array_multisort()
,带有foreach循环:
foreach ($array2 as $row) {
$punkte_s[] = $row['punkte_s'];
$fairness[] = $row['fairness'];
$tore_diff[] = $row['tore_diff'];
$tore_erzielt[] = $row['tore_erzielt'];
}
array_multisort(
$punkte_s, SORT_DESC,
$fairness, SORT_DESC,
$tore_diff, SORT_DESC,
$tore_erzielt, SORT_DESC,
$array2
);
var_export($array2);
usort()
,带有飞船运算符和明确的规则数组:
usort($array3, function($a, $b) {
return [$b['punkte_s'], $b['fairness'], $b['tore_diff'], $b['tore_erzielt']]
<=>
[$a['punkte_s'], $a['fairness'], $a['tore_diff'], $a['tore_erzielt']];
});
var_export($array3);
usort()
和飞船运算符,依赖于输入数组列结构:
usort($array4, function($a, $b) {
unset($a['team_id'], $b['team_id']);
return $b <=> $a;
});
var_export($array4);