Array Permutationen in mehrdimensionales array, halten Sie die Tasten PHP

Seit zwei Tagen habe ich ausgeführt wurde verrückt versucht, um dies zu erreichen, vielleicht können Sie mich aufklären. Dies ist für ein Pferd Wetten permutation. Jedes mal, wenn ein user spielt, bekomme ich ein mehrdimensionales array (2 Stufen). Die erste Ebene enthält die race-ID, die in der zweiten Ebene stehen dir Pferde ausgewählt, indem der Benutzer für das Rennen. Es sieht wie folgt aus:

$play = array
(
    '4' => array(7, 32),
    '8' => array(4),
    '2' => array(9),
    '12' => array('5'),
    '83' => array('10', '11', '12', ''),
    '9' => array('3'),
);

Muss ich wissen, was sind alle möglichen Kombinationen für die, die spielen. Das ist leicht getan mit dieser Funktion:

function permutations(array $array)
{
    switch (count($array)) {
        case 1:
            return $array[0];
            break;
        case 0:
            throw new InvalidArgumentException('Requires at least one array');
            break;
    }

    $a = array_shift($array);
    $b = permutations($array);

    $return = array();
    foreach ($a as $key => $v) {
        if(is_numeric($v))
        {
            foreach ($b as $key2 => $v2) {
                $return[] = array_merge(array($v), (array) $v2);
            }
        }
    }

    return $return;
}

Dieser gibt ein array mit allen möglichen Kombinationen schön. So weit, So gut, und das Ergebnis sieht wie folgt aus:

Array
(
    [0] => Array
        (
            [0] => 7
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 10
            [5] => 3
        )

    [1] => Array
        (
            [0] => 7
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 11
            [5] => 3
        )

    [2] => Array
        (
            [0] => 7
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 12
            [5] => 3
        )

    [3] => Array
        (
            [0] => 32
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 10
            [5] => 3
        )

    [4] => Array
        (
            [0] => 32
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 11
            [5] => 3
        )

    [5] => Array
        (
            [0] => 32
            [1] => 4
            [2] => 9
            [3] => 5
            [4] => 12
            [5] => 3
        )

)

Mein problem: ich brauche das array "Schlüssel" für jedes Pferd der "Rasse-ID", nicht 0,1,2,3. Ich muss das Resultat so sein:

Array
(
    [0] => Array
        (
            [4] => 7
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 10
            [9] => 3
        )

    [1] => Array
        (
            [4] => 7
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 11
            [9] => 3
        )

    [2] => Array
        (
            [4] => 7
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 12
            [9] => 3
        )

    [3] => Array
        (
            [4] => 32
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 10
            [9] => 3
        )

    [4] => Array
        (
            [4] => 32
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 11
            [9] => 3
        )

    [5] => Array
        (
            [4] => 32
            [8] => 4
            [2] => 9
            [12] => 5
            [83] => 12
            [9] => 3
        )

)

Wie kann ich dies erreichen? Ich weiß, das ist ein langer post, aber ich musste die Grafik dieser. Ich habe Probleme, mich zu wickeln meinem Kopf herum, die Funktion der Rekursion und ich völlig verloren in jeder Schleife.

  • Warum sind manche Werte zahlen in Ihre ursprüngliche array und ein paar Streicher? Warum die leere?
  • Weil es darum geht, aus einer HTML-Checkboxen-array, so dass der Benutzer kann verlassen einige der Checkboxen leer. Die permutations () - Funktion ignoriert die Werte, die nicht zahlen. Das ist kein problem 🙂
  • wie sollte es mit einem Schlüssel bitte fügen Sie einige Beispiele für gültige array Sie auf der Suche nach vorn zu machen.
  • Der Letzte code-block enthält die benötigten array-Struktur. Danke!
InformationsquelleAutor Dan H | 2011-05-11
Schreibe einen Kommentar