Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie sortiere ich eine Array-Liste im Zick-Zack in PHP?

Die Idee wäre:

  • Sortieren Sie Ihre Startdaten (oder beginnen Sie am besten damit, dass sie sortiert sind).
  • Teilen Sie es in Blöcke auf, im Grunde einen für jede Ihrer Zeilen.
  • Kehren Sie die Reihenfolge jedes anderen Chunks um.
  • Drehen Sie die Matrix um, sodass Sie Ihre Gruppen haben – eine pro Spalte statt eine pro Zeile.

Beispiel:

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

Ausgabe:

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
        )

)