2016-09-26 6 views
4

Ich habe Array aus Eingabefeld, jetzt was ich will, ist es, verschiedene Kombination von Werten zu erzeugen, in der Datenbank colunm zu speichern.wie Array-Wert zusammenführen?

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

) 

jetzt, was ich Kombination Wie generieren möchten:

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

Wollen Sie nur eine Liste von jeder Variation? – AndrewL

+0

Ihre Frage ist unklar. SO werden Sie bitte erklären, auf welcher Grundlage Sie Ihr Array zusammenführen wollen –

+0

sehen wie wenn: Farbe: rot, blau und Größe: s, m dann sollte es 4 Kombination rot-s, rot-m, blau-s, blau zu generieren -m: Wenn Farbe: rot, blau, pink und Größe: s, m dann sollte es 6 erzeugen: rot-s, rot-m, blau-s, blau-m, rosa-s, pink-m. hoffe es ist jetzt klar. – Vikas

Antwort

2

Diese cartesianischen product.You ist diese Funktion

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

Hoffnung können Sie helfen können .

+0

Vielen Dank. das hat perfekt funktioniert. – Vikas

3

Sie mehrere for-Schleife verwenden, wird es Ihnen helfen, diese Art von Kombinationen zu erzeugen.

ZB:

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

    //your code 
    } 
} 

oder versuchen Sie den Code unten

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

geschätzt. aber können Sie mir mit einigen Details helfen, diese Kombination zu bekommen – Vikas

+0

danke für Hilfe, aber @nango in meinem Fall geeignet. – Vikas

Verwandte Themen