2016-04-02 3 views
1

ユーザーが記入するために、価格入力を伴う複数の配列の属性のすべての組み合わせを表示しようとしています。その後、入力値が保存されますデータベースに格納する。PHPで関連する入力フィールドを持つ配列からすべての属性の組み合わせを生成する方法

この例では、私は3つの配列使用しています:以下の組み合わせ機能で

[1] => Array 
    (
     [8] => Small 
     [1] => Round 
    ) 

[2] => Array 
    (
     [6] => 2 Layers 
     [4] => 1 Layer 
    ) 

[3] => Array 
    (
     [10] => no fruit 
     [9] => w/ fruit 
    ) 

function combination($array, $str = '', $valueKeys = '') { 
    $current = array_shift($array); 

    if(count($array) > 0) { 
     foreach($current as $k => $element) { 

      $valueKeys .= $k.'+'; 
      combination($array, $str.' + '.$element, $valueKeys); 
     } 
    } 
    else{ 
     foreach($current as $k => $element) { 
      $valueKeys .= $k; 
      echo '<label>'.substr($str, 3).' + '.$element . '</label> = <input name="attrib_price_'.$valueKeys.'" value="" /><br />' . PHP_EOL; 
      $valueKeys = ''; 

     } 
    } 
} 

HTML出力

<label>Small + 2 Layers + no fruit</label> = <input name="attrib_price_8+6+10" value="" /><br /> 
<label>Small + 2 Layers + w/ fruit</label> = <input name="attrib_price_9" value="" /><br /> 
<label>Small + 1 Layer + no fruit</label> = <input name="attrib_price_8+6+4+10" value="" /><br /> 
<label>Small + 1 Layer + w/ fruit</label> = <input name="attrib_price_9" value="" /><br /> 
<label>Round + 2 Layers + no fruit</label> = <input name="attrib_price_8+1+6+10" value="" /><br /> 
<label>Round + 2 Layers + w/ fruit</label> = <input name="attrib_price_9" value="" /><br /> 
<label>Round + 1 Layer + no fruit</label> = <input name="attrib_price_8+1+6+4+10" value="" /><br /> 
<label>Round + 1 Layer + w/ fruit</label> = <input name="attrib_price_9" value="" /><br /> 

全てを示しているの組み合わせが、価格入力名に問題があり、属性キーを含めるべきですが、最初のものだけがcorrですect(8 + 6 + 10)。これを達成するためにコードを微調整するにはどうすればよいですか? 提案が歓迎されました。ありがとう!唯一の最後の要素は、あなたが$valueKeyに、前の反復の値を追加している場合のセクションでも次の反復で印刷された理由ですあなたは$valueKeysをクリアし、他のセクションで

答えて

0

function combination($array, $str = '', $valueKeys = '') { 
    $current = array_shift($array); 

    if(count($array) > 0) { 
     foreach($current as $k => $element) { 
      combination($array, $str.' + '.$element, $valueKeys.$k.'+'); 
     } 
    } 
    else{ 
     foreach($current as $k => $element) { 
      echo '<label>'.substr($str, 3).' + '.$element . '</label> = <input name="attrib_price_'.$valueKeys.$k.'" value="" /><br />' . PHP_EOL; 
     } 
    } 
} 
+1

ちょうど 'attrib_price_をエコーないのはなぜ – Yuri

+0

あなたは絶対に正しいです –

+0

2回目の繰り返しでコードを更新しましたが、3回目の反復では入力名に4つのIDが表示されます -
Luis

関連する問題