2015-12-28 2 views
-2

Pouvez-vous m'aider avec la génération de produit caresian. Il est similaire à this stackoverflow. Je veux générer des entrées, donc j'ai besoin de garder mon identifiant.produit cartésien avec PHP (id, nom, variantes)

Exemple:

mes données d'entrée:

[ 
    1 => [ 
    id => 1, 
    name => "Color", 
    options => [ 
     5 => [ 
     id => 5, 
     name => "Red" 
     ], 
     6 => [ 
     id => 6, 
     name => "Blue" 
     ] 
    ] 
    ], 
2 => [ 
    id => 2, 
    name => "Size", 
    options => [ 
     7 => [ 
     id => 7, 
     name => "S" 
     ], 
     8 => [ 
     id => 8, 
     name => "M" 
     ] 
    ] 
    ], 

    // etc 
] 

résultat Je pense:

[ 
"5-7" => "Red/S", 
"5-8" => "Red/M", 
"6-7" => "Blue/S", 
"6-8" => "Blue/M" 
] 

J'ai besoin fonction générique pour un certain nombre de propriétés/options ..

+0

qu'avez-vous déjà essayé? s'il vous plaît poster votre code que vous avez essayé d'abord, puis nous pouvons voir où vous allez mal. – Clay

+0

J'ai essayé la solution d'autres stackoverflow que j'ai écrit ci-dessus, mais ce n'est pas pour mon but. – user3359653

Répondre

0

C'est en fait le code de travail pour l'instant, mais je ne sais pas combien est efficace.

// filter out properties without options 
$withOptions = array_filter($properties, function($property) { 
    return count($property['options']) > 0; 
}); 

$result = []; 

$skipFirst = true; 

foreach ($withOptions as $property) { 

    if ($skipFirst) { 

     foreach (reset($withOptions)['options'] as $id => $option) { 
      $result[$id] = $option['name']; 
     } 

     $skipFirst = false; 
     continue; 
    } 

    foreach ($result as $code => $variant) {  
     foreach ($property['options'] as $id => $option) { 
      $new = $code . "-" . $id; 
      $result[$new] = $variant . "/" . $option['name']; 
      unset($result[$code]); 
     } 
    } 
} 
0

Nested loop man, chaque entrée du tableau 1 doit être liée à chaque entrée de array2.

$ finalArray = array();

foreach (array1 as $key1 as $value1){ 
    foreach (array2 as $key2 as$value2){ 
    echo $value1 . " - " .$value2."<br/>"; 
    $finalArray[$key1.'-'.$key2] = $value1 ." - ".$value2; 
} 
} 

le tableau final aura ce dont vous avez besoin.

+0

J'ai besoin de "fonction" dynamique pour n'importe quel nombre de "propriétés". Il pourrait y avoir 2, 3, 4 .. un certain nombre de propriétés avec des options :) – user3359653

+0

qui fonctionnera .. juste déclarer un nouveau tableau et continuez à mettre la clé et les valeurs..lettez moi mettre à jour ma réponse –

+0

Je vois, mais je peux pas modifier la fonction chaque fois que j'ajoute de nouvelles propriétés, il doit être générique pour un nombre quelconque de propriétés. Peut-être que nous ne nous comprenons pas :) – user3359653