Php 如何合并数组值?

Php 如何合并数组值?,php,mysql,arrays,Php,Mysql,Arrays,我有来自输入字段的数组,现在我想要的是生成各种值的组合,以保存在数据库colunm中 -------------------------------- 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')

我有来自输入字段的数组,现在我想要的是生成各种值的组合,以保存在数据库colunm中

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

现在我要生成的组合如下:

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

如果您使用multiple for循环,它将帮助您生成该类型的组合

例如:

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

     //your code
  }
}

这是笛卡尔积。你可以使用这个函数

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

希望可以帮助您。

您只需要列出每种变体吗?您的问题不清楚。那么请你解释一下你想在什么基础上合并你的阵列,比如:颜色:红色,蓝色和大小:s,m然后它应该生成4个组合红s,红m,蓝s,蓝m:如果颜色:红,蓝,粉红和大小:s,m那么它应该生成6个:红s,红m,蓝s,蓝m,粉红s,粉红m。希望它现在清楚了。这将帮助你:谢谢。但是你能帮我做一些细节来得到这些组合吗
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;
}
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;
}