簡體   English   中英

如何在PHP的“ zig-zag”中對數組列表進行排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM