【问题标题】:how to merge array value?如何合并数组值?
【发布时间】:2017-02-03 06:52:01
【问题描述】:

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

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

【问题讨论】:

  • 您只想要每个变体的列表吗?
  • 您的问题不清楚。所以请你解释一下你想在什么基础上合并你的数组
  • 看看 if: color: red, blue and size: s, m 那么它应该生成 4 个组合 red-s, red-m, blue-s, blue-m: if color:red, blue, pink and size: s, m 那么它应该生成 6: red-s, red-m, blue-s, blue-m, pink-s, pink-m。希望现在清楚。
  • 这将对您有所帮助:stackoverflow.com/a/28133030/916000

标签: php mysql arrays


【解决方案1】:

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

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

希望能帮到你。

【讨论】:

    【解决方案2】:

    您使用多个 for 循环,它将帮助您生成该类型的组合。

    例如:

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

    【讨论】:

    • 赞赏。但是你能帮我提供一些细节来获得这些组合吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多