2016-07-15 12 views
0

Ich habe ein Formular, das drei Sätze von Kontrollkästchen enthält: Toppings, Größen, Modifikatoren. Nach dem Senden gibt jedes ein Array mit Werten zurück. Was ich schließlich tun muss, ist einen separaten Datensatz in einer Datenbank für jede mögliche Kombination der drei zu erstellen.Wie kann ich ein mehrdimensionales Array ohne Schleifen erstellen?

Beispiel:

[15-Jul-2016 11:47:29] topps 
[15-Jul-2016 11:47:29] Array 
(
    [0] => B 
    [1] => K 
    [2] => KT 
    [3] => ME 
    [4] => PK 
) 

[15-Jul-2016 11:47:29] mods 
[15-Jul-2016 11:47:29] Array 
(
    [0] => R 
) 

[15-Jul-2016 11:47:29] sizes 
[15-Jul-2016 11:47:29] Array 
(
    [0] => 7I 
    [1] => FM 
    [2] => L 
    [3] => LP 
    [4] => NL 
) 

Ich brauche einen Rekord für B R 7I, B R FM, B R L usw. K R 7I, K R FM, und so weiter zu erstellen. Was möchte ich mit zu beginnen, haben ein Array ist, das wie folgt aussieht:

$records = array(
    array('B', 'R', '7I'), 
    array('B', 'R', 'FM'), 
    // and so on 
); 

Ich bin nicht super-vertraut mit den Array-Funktionen in PHP (array_walk, array_map, etc.)

Gibt es eine Möglichkeit, mein gewünschtes Array zu generieren, ohne geschachtelte Schleifen zu machen?

+2

Ja, aber ... warum? –

+0

duplizieren: http://stackoverflow.com/questions/8567082/how-to-generate-in-php-all-combinations-of-items-in-multiple-arrays bearbeiten: Entschuldigung, keine Antworten in dieser Frage ohne Schleife – mulquin

+2

Warum keine Schleifen? Entweder Sie verwenden Schleifen, oder Sie müssen jede mögliche Kombination im Voraus selbst ausschreiben. Und intern verwenden array_walk/array_map Schleifen ANYWAYS. –

Antwort

0

könnte Sie direkt sehen Sie Wahnsinn Verwendung array_walk

$topps = ['B', 'K', 'KT', 'ME', 'PK']; 
$mods = ['R']; 
$sizes = ['7I', 'FM', 'L', 'LP', 'NL']; 

$result = []; 

// use maddness 
array_walk($topps, function($topp)use($mods, $sizes, &$result) { 
    array_walk($mods, function($mod)use($topp, $sizes, &$result) { 
     array_walk($sizes, function($size)use($topp, $mod, &$result) { 
      $result[] = [$topp, $mod, $size]; 
     }); 
    }); 
}); 
var_dump($result); 

Wegen Verschlusssystem in PHP verwenden. Sie können die Verwendung der Klasse mindern, jedoch mit einem Klassenoverhead.

// class 
class arrayGenerator { 

    private $topps, $mods, $sizes; 
    private $result; 

    function __construct($topps, $mods, $sizes) { 
     $this->topps = $topps; 
     $this->mods = $mods; 
     $this->sizes = $sizes; 
    } 

    function generate($topps, $mods, $sizes) { 
     $this->result = []; 
     array_walk($this->topps, function($topp) { 
      array_walk($this->mods, function($mod)use($topp) { 
       array_walk($this->sizes, function($size)use($topp, $mod) { 
        $this->result[] = [$topp, $mod, $size]; 
       }); 
      }); 
     }); 
     return $this->result; 
    } 

} 

$generator = new arrayGenerator($topps, $mods, $sizes); 
$result = $generator->generate(); 
var_dump($result); 
Verwandte Themen