[英]How to sort array list in “zig-zag” in PHP?
因此,我有一個包含球員姓名和技能水平的數據庫。 看起來像這樣:
Id | Name | Level
1 | Peter | 24
2 | Andy | 23
...
24 | John | 1
列表中級別最高的第一個玩家是最強的玩家,最后一個是最弱的玩家。
我需要將他們與4個玩家按組進行排序,因此,如果我有24個人,將有6個組。
我需要對它進行排序的方式稱為“之字形”。
它是這樣的:
Ag Bg Cg Dg Eg Fg
01 02 03 04 05 06
12 11 10 09 08 07
13 14 15 16 17 18
24 23 22 21 20 19
因此,A組將由玩家組成: 1,12,13,24 。
B組玩家: 2、11、14、23 。
C組的玩家:3,10,15,22等。
手工操作很容易,但是如何用PHP語言自動執行這種操作呢?
組應該是數組列表(我認為是這樣),我可以輕松地將其放入數據庫中的組表。
這個想法是:
// Basic sample data.
$players = range(1, 24);
// Sort them ascending if you need to.
sort($players);
// Make a matrix. 2d array with a column per group.
$matrix = array_chunk($players, ceil(count($players)/4));
// Reverse every other row.
for ($i = 0; $i < count($matrix); $i++) {
if ($i % 2) {
$matrix[$i] = array_reverse($matrix[$i]);
}
}
// Flip the matrix.
$groups = array_map(null, ...$matrix); // PHP 5.6 with the fancy splat operator.
//$groups = call_user_func_array('array_map', array_merge([null], $matrix)); // PHP < 5.6 - less fancy.
// The result is...
print_r($groups);
Array
(
[0] => Array
(
[0] => 1
[1] => 12
[2] => 13
[3] => 24
)
[1] => Array
(
[0] => 2
[1] => 11
[2] => 14
[3] => 23
)
[2] => Array
(
[0] => 3
[1] => 10
[2] => 15
[3] => 22
)
[3] => Array
(
[0] => 4
[1] => 9
[2] => 16
[3] => 21
)
[4] => Array
(
[0] => 5
[1] => 8
[2] => 17
[3] => 20
)
[5] => Array
(
[0] => 6
[1] => 7
[2] => 18
[3] => 19
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.