Array auf 4 Spalten sortieren

wydy

Grünschnabel
Moin,
ich habe ein Array mit mehreren Werten. Jetzt möchte ich diese Werte auf 4 Spalten sortieren. Jedoch fällt mir zurzeit nicht ein, wie ich das genau realisieren kann. Hier mal ein kleines Beispiel wie ich mir das Resultat vorstelle:
Code:
A    E    I    M
B    F    J    N
C    G    K
D    H    L
Ich weiss, dass es irgendwie mit modulo und einer for Schleife funktioniert, aber leider bekomme ich es nicht hin.
 
Einer der richtigen Profis kommt sicher zu einer schöneren (besseren) Lösung, ich hab sowas hier:

PHP:
$array = array ( 'b', 'j', 'e', 'm', 'l', 'z', 'd', 'n', 'g', 'i', 'a', 'k', 'c' );

sort ( $array ); // array sortieren

$r = 0; // zähler starten

for ( $i = 0; $i < count ( $array ); $i++ )
{
$r++;

    if ( $r == 5 )
    {
        $r = 1;
    }
    
    $new_array[$r][] = $array[$i]; // neues array bauen
}
Gibt folgendes:
Code:
array(4) {
  [1]=>
  array(4) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "e"
    [2]=>
    string(1) "k"
    [3]=>
    string(1) "z"
  }
  [2]=>
  array(3) {
    [0]=>
    string(1) "b"
    [1]=>
    string(1) "g"
    [2]=>
    string(1) "l"
  }
  [3]=>
  array(3) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "i"
    [2]=>
    string(1) "m"
  }
  [4]=>
  array(3) {
    [0]=>
    string(1) "d"
    [1]=>
    string(1) "j"
    [2]=>
    string(1) "n"
  }
}

Wolltest das so?
 
Einer der richtigen Profis kommt sicher zu einer schöneren (besseren) Lösung, ich hab sowas hier:

PHP:
$array = array ( 'b', 'j', 'e', 'm', 'l', 'z', 'd', 'n', 'g', 'i', 'a', 'k', 'c' );

sort ( $array ); // array sortieren

$r = 0; // zähler starten

for ( $i = 0; $i < count ( $array ); $i++ )
{
$r++;

    if ( $r == 5 )
    {
        $r = 1;
    }
    
    $new_array[$r][] = $array[$i]; // neues array bauen
}

Ist von der Umsetzung schon richtig. Effizienter wäre es aber in etwa so:
PHP:
<?php

$range			= range( 'a', 'n', 1 );
$rangeLength	= count( $range );
$columnCount	= 4;

$new = array();

for ( $i = 0; $i < $rangeLength; ++$i ) {
    $new[ $i % $columnCount ][] = $range[ $i ];
}

var_dump( $new );

Wenn man Geschwindigkeitsfetischist ist, kann man über
PHP:
foreach ( $range as $key => &$current ) {
	$new[ $key % $columnCount ][] = $current;
}
nochmal einiges rausholen.

Das Resultat ist identisch.
 
Ich sehe grade das passt noch nicht ganz, in seinem Beispiel will er ja 3*4 und 1*2. Wir sind bei 1*4 und 3*3. Nochmal bischen basteln :)
 
Danke für die Hilfe. So funktioniert es :D
Hätte eigentlich auch selber darauf kommen sollen, die Werte in ein neues Array zu speichern. Hab mich wohl zu sehr bemüht das ganze mit einer Modulo Funktion zu lösen.
Es ist nicht schlimm, dass die Werte nicht so wie in meinem Beispiel sortiert sind. Geht mir nur darum, dass alle Werte auf 4 Spalten verteilt sind.
 
Zurück