2016-08-10 5 views
-1

これに続いてquestion私は配列の変種を渡し、すべての変種を持つ1つの配列を返すように関数に(再帰的に)置く必要があります。Tシャツのバリアントを反復する再帰関数

私はこのような異なるTシャツ変種の配列があります。

カラー:ブラック、レッド、ブルー

サイズ:L、M、XL

...

バリアントは異なる場合がありますが、より多くのサイズ、色、または組織バリアントのような新しいバリアントがある場合もあります。

私はこのようなすべての反復バリエーションを持つ配列を返す関数が必要です。

0色=>ブラックサイズ=> L

1色=>ブラックサイズ=> M

を2色=>ブラックサイズXL

3色=>赤サイズ=> L

4色=>赤サイズ=> M

..

私はこの最終的なアレイを構築することはできません。どんな助けもありがとう!

+0

は、アレイ内のこれらのアレイですか、別々のアレイですか? – jonju

答えて

1

あなたが探しているのはMathematical inductionです。

function induction($arrays, $i = 0) 
{ 
    if(! isset($arrays[$i])) 
    { 
     return []; 
    } 
    if($i == count($arrays) - 1) 
    { 
     return $arrays[$i]; 
    } 

    $temporaryCombination = induction($arrays, $i + 1); 

    $result = []; 

    foreach ($arrays[$i] as $value) 
    { 
     foreach ($temporaryCombination as $combination) 
     { 
      $result[] = is_array($combination) 
       ? array_merge([$value], $combination) : [ 
        $value, 
        $combination, 
       ]; 
     } 
    } 

    return $result; 
} 

var_dump(induction([$color,$size,$material])); 

偶然、またはない、あなたの最初に回答することで、私もこの質問に答えるましたが、上記の機能:あなたの最初の質問に答えるために、あなたはあなたのニーズに合った、このようなものを必要なミックスと一致しますちょっと微調整が必​​要です。

+0

ありがとうございました! –

0

その動作するはずのような何か:メインアレイによる

$inventory = array(); 

foreach($colors as $color){ 
    foreach($sizes as $size){ 
     $inventory[] = array(
      'Color' => $color, 
      'Size' => $size, 
     ), 
    } 
} 
0

を最初のループは、ループが反復されるよう$array、あなたは1によって色&サイズ1を含む配列を取得しますと言います。その後、対応するキー/インデックスすなわち['Color'] & ['Size']と色のシャツの&サイズを取得し、新しいアレイ$colors & $sizeを分離するためにそれらをプッシュすることができます。 array_unique()は、配列から重複要素を削除します。

$colors=[]; 
$sizes=[];  
foreach($array as $arr){ 
    $colors[]=$arr['Color']; 
    $sizes[]=$arr['Size']; 
} 
$colors=array_unique($colors) 
$sizes=array_unique($sizes) 
関連する問題