2016-09-26 99 views
4

我有從輸入字段的數組,現在我想要的是生成各種值的組合保存在數據庫柱。如何合併數組值?

-------------------------------- 
id | value 
-------------------------------- 
1 8,12,7,11 
2 8,15,7,11 
3 9,12,7,11 
4 9,15,7,11 
5 13,12,7,11 
6 13,15,7,11 

$ first = $ this-> input-> post('product_variant');

Array 
(
[12] => Array 
(
    [0] => 8 
    [1] => 9 
    [2] => 13 
) 

[13] => Array 
(
    [0] => 12 
    [1] => 15 
) 

[15] => Array 
(
    [0] => 7 
) 

[16] => Array 
(
    [0] => 11 
) 

) 

現在我想產生組合像:

8,12,7,11 
8,15,7,11 
9,12,7,11 
9,15,7,11 
13,12,7,11 
13,15,7,11 
+0

你想每個變化的清單嗎? – AndrewL

+0

你的問題不清楚。那麼請你解釋一下,如果你想合併你的陣列 –

+0

看看是什麼樣的話:color:red,blue and size:s,m那麼它應該生成4個組合red -s,red-m,blue-s,blue -m:如果顏色:紅色,藍色,粉紅色和尺寸:s,m那麼它應該生成6:紅色-s,紅色-m,藍色-s,藍色-m,粉紅色-s,粉紅色-m。現在希望它清楚。 – Vikas

回答

2

這是笛卡爾product.You可以使用此功能

function cartesian($arr,$str = array()){ 
$first = array_shift($arr); 
if(count($str) > 1) { 
    foreach ($str as $k => $val) { 
     foreach ($first as $key => $value) { 
      $str2[] = $val.','.$value; 
     } 
    } 
}else{ 
    foreach ($first as $key => $value) { 
     $str2[] = $value; 
    } 
} 

if(count($arr) > 0){ 
    $str2 = cartesian($arr,$str2); 
} 
return $str2; 
} 

希望可以幫到你。

+0

非常感謝。這完美的工作。 – Vikas

3
您使用循環的多個

,它會幫助你產生那種類型的組合。

如:

for(int i=0;i<your array length;i++){ 
    for(int j=0;j<i;j++){ 

    //your code 
    } 
} 

或嘗試下面的代碼

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

// get combinations from subsequent arrays 
$tmp = combinations($arrays, $i + 1); 

$result = array(); 

// concat each array from tmp with each element from $arrays[$i] 
foreach ($arrays[$i] as $v) { 
    foreach ($tmp as $t) { 
     $result[] = is_array($t) ? 
      array_merge(array($v), $t) : 
      array($v, $t); 
    } 
} 

return $result; 
} 
+0

讚賞。但你能幫我一些細節,以獲得這些combincation – Vikas

+0

謝謝你的幫助,但@nango適合我的情況。 – Vikas