2016-04-02 19 views
1

Kullanıcının doldurabilmesi için birden fazla dizinin tüm özellik kombinasyonlarını ilişkili fiyat girişi ile göstermeye çalışacağım. Bundan sonra, giriş değerleri kaydedilecektir. veritabanına Bu örnek için PHP'de ilişkili giriş alanı olan dizilerden tüm öznitelik kombinasyonları nasıl oluşturulur

, ben 3 diziler kullanıyorum:

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 Çıktı

<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 /> 

kombinasyonları tüm gösterdi Aşağıdakiler kombinasyon fonksiyonu ile

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

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

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

ama Fiyat giriş adlarıyla ilgili bir sorunum var, bunlar özellik anahtarlarını içermeli ama sadece bir tanesi düzeltmeli vb (8 + 6 + 10). Bunu yapmak için kodu nasıl değiştirebilirim? Öneriler karşılandı. Teşekkürler!

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; 
     } 
    } 
} 

cevap

0

Sadece son eleman Ayrıca varsa bölümünde size $valueKey önceki iterasyon değerini ekliyorsanız sonraki yineleme basılmış neden olduğunu $valueKeys temizlemek '. $ valueKeys. $ k.' '``
+1

Neden sadece yankılamamasını 'attrib_price_: else bölümünde – Yuri

+0

kesinlikle haklısınız. –

+0

Kodunu buna göre güncelledim, ikinci iterasyon tamam, ama üçüncü yineleme, giriş adında dört ids gösteriyor -
Luis