Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将现有产品变体与新生成的变体关联起来_Php_Arrays_Combinations - Fatal编程技术网

Php 将现有产品变体与新生成的变体关联起来

Php 将现有产品变体与新生成的变体关联起来,php,arrays,combinations,Php,Arrays,Combinations,我想为我自己的电子商务网站创建产品变体 我有一个问题,当我想知道哪一个变体是存在的,哪一个是新的,插入或更新它 要创建变体,我使用以下php函数: <pre> function possible_combos($groups, $prefix='') { $result = array(); $group = array_shift($groups); foreach($group as $selected) { if($groups) {

我想为我自己的电子商务网站创建产品变体

我有一个问题,当我想知道哪一个变体是存在的,哪一个是新的,插入或更新它

要创建变体,我使用以下php函数:

<pre>
function possible_combos($groups, $prefix='') {
    $result = array();
    $group = array_shift($groups);

    foreach($group as $selected) {
        if($groups) {
            $result = array_merge($result, possible_combos2($groups, $prefix .$selected.', '));
        } else {
            $result[] = [
                'combination_string' => $prefix.$selected,
            ];
        }
    }
    return $result;
}
</pre>
<pre>
Array
(
    [0] => Array
        (
            [combination_string] => Green, 128 GB
        )

    [1] => Array
        (
            [combination_string] => Green, 256 GB
        )

    [2] => Array
        (
            [combination_string] => Red, 128 GB
        )

    [3] => Array
        (
            [combination_string] => Red, 256 GB
        )

)
</pre>
<pre>
Array
(
    [Color] => Array
        (
            [0] => Green
            [1] => Red
        )

    [Storage] => Array
        (
            [0] => 128 GB
            [1] => 256 GB
        )
    [Size] => Array
        (
            [0] => Big
        )

)
</pre>
<pre>
Array
(
    [0] => Array
        (
            [product_id] => 1,
            [combination_string] => Green, 128 GB, Big
        )

    [1] => Array
        (
            [product_id] => 2,
            [combination_string] => Green, 256 GB, Big
        )

    [2] => Array
        (
            [combination_string] => Green, 512 GB, Big
        )

    [3] => Array
        (
            [product_id] => 3,
            [combination_string] => Red, 128 GB, Big
        )

    [4] => Array
        (
            [product_id] => 4,
            [combination_string] => Red, 256 GB, Big
        )

    [5] => Array
        (
            [combination_string] => Red, 512 GB, Big
        )

)
</pre>

函数可能的\u组合($groups,$prefix=''){
$result=array();
$group=阵列移位($group);
foreach($group as$selected){
如果($组){
$result=数组\合并($result,可能的\组合2($groups,$prefix.$selected.',');
}否则{
$result[]=[
“组合字符串”=>$前缀。$已选定,
];
}
}
返回$result;
}
使用以下阵列进行生成:


排列
(
[颜色]=>阵列
(
[0]=>绿色
[1] =>红色
)
[存储]=>阵列
(
[0]=>128 GB
[1] =>256 GB
)
)
颜色:绿色、红色 存储:128 GB、256 GB

结果是:


排列
(
[0]=>阵列
(
[组合字符串]=>绿色,128 GB
)
[1] =>阵列
(
[组合字符串]=>绿色,256 GB
)
[2] =>阵列
(
[组合字符串]=>红色,128 GB
)
[3] =>阵列
(
[组合字符串]=>红色,256 GB
)
)
在添加模式下一切正常,问题在于编辑模式。

对于每个变体组合,我使用“Parent_id”创建一个新产品

因此,在编辑页面a中有以下内容:


排列
(
[0]=>阵列
(
[产品id]=>1,
[组合字符串]=>绿色,128 GB
)
[1] =>阵列
(
[产品id]=>2,
[组合字符串]=>绿色,256 GB
)
[2] =>阵列
(
[产品id]=>3,
[组合字符串]=>红色,128 GB
)
[3] =>阵列
(
[产品id]=>4,
[组合字符串]=>红色,256 GB
)
)
如果我为组合添加新属性,例如:

大小:大


排列
(
[颜色]=>阵列
(
[0]=>绿色
[1] =>红色
)
[存储]=>阵列
(
[0]=>128 GB
[1] =>256 GB
)
[大小]=>阵列
(
[0]=>大
)
)
对于这种情况,我想返回


排列
(
[0]=>阵列
(
[产品id]=>1,
[组合字符串]=>绿色,128 GB,大
)
[1] =>阵列
(
[产品id]=>2,
[组合字符串]=>绿色,256 GB,大
)
[2] =>阵列
(
[产品id]=>3,
[组合字符串]=>红色,128 GB,大
)
[3] =>阵列
(
[产品id]=>4,
[组合字符串]=>红色,256 GB,大
)
)
而且。。。如果我为属性存储512 GB添加一个新值,例如: 结果应该如下所示:


排列
(
[0]=>阵列
(
[产品id]=>1,
[组合字符串]=>绿色,128 GB,大
)
[1] =>阵列
(
[产品id]=>2,
[组合字符串]=>绿色,256 GB,大
)
[2] =>阵列
(
[组合字符串]=>绿色,512 GB,大
)
[3] =>阵列
(
[产品id]=>3,
[组合字符串]=>红色,128 GB,大
)
[4] =>阵列
(
[产品id]=>4,
[组合字符串]=>红色,256 GB,大
)
[5] =>阵列
(
[组合字符串]=>红色,512 GB,大
)
)
现有梳子没有产品标识

我不知道我是否清楚这一点,但如果需要,我可以提供更多信息


编辑对于@PHPnoob

您需要一个可以进行多数组排列的函数

我将在下面简单地粘贴一个相应的函数:


您需要一个可以执行多个数组置换的函数

我将在下面简单地粘贴一个相应的函数:


谢谢你的回答,但我有笛卡尔函数,我的问题是如何知道哪个组合是新的,哪个是旧的。我需要一种将DB combinations查询数组与新的组合数组合并的方法。由于只有一列“name”中包含了差异,您将如何从该表中进行筛选?我猜你必须在每一行上循环并插入新的一行,如果它还不存在的话…现在我觉得它更奇怪了。案例2:为什么父id为0,三个设置为1?案例3:你不能期望两个ID是egal,因为根据定义,它们是唯一的…所以要么你正确地重新构造数据库,要么你无论如何都尝试这样做,所以你需要将“product_name”列设置为唯一,并使用MySQL INSERT IGNORE语句。Thx作为你的答案,但我有笛卡尔函数,我的问题是如何知道哪个组合是新的,哪个是旧的。我需要一种将DB combinations查询数组与新的组合数组合并的方法。由于只有一列“name”中包含了差异,您将如何从该表中进行筛选?我猜你必须在每一行上循环并插入新的一行,如果它还不存在的话…现在我觉得它更奇怪了。案例2:为什么父id为0,三个设置为1?案例3:您不能期望两个ID是egal,因为根据定义,它们是唯一的……因此,要么您正确地重新构建数据库,要么您无论如何都尝试这样做,因此您需要将“product_name”列设置为唯一,并使用MySQL INSERT IGNORE语句。
<pre>
Array
(
    [Color] => Array
        (
            [0] => Green
            [1] => Red
        )

    [Storage] => Array
        (
            [0] => 128 GB
            [1] => 256 GB
        )
    [Size] => Array
        (
            [0] => Big
        )

)
</pre>
<pre>
Array
(
    [0] => Array
        (
            [product_id] => 1,
            [combination_string] => Green, 128 GB, Big
        )

    [1] => Array
        (
            [product_id] => 2,
            [combination_string] => Green, 256 GB, Big
        )

    [2] => Array
        (
            [product_id] => 3,
            [combination_string] => Red, 128 GB, Big
        )

    [3] => Array
        (
            [product_id] => 4,
            [combination_string] => Red, 256 GB, Big
        )
)
</pre>
<pre>
Array
(
    [0] => Array
        (
            [product_id] => 1,
            [combination_string] => Green, 128 GB, Big
        )

    [1] => Array
        (
            [product_id] => 2,
            [combination_string] => Green, 256 GB, Big
        )

    [2] => Array
        (
            [combination_string] => Green, 512 GB, Big
        )

    [3] => Array
        (
            [product_id] => 3,
            [combination_string] => Red, 128 GB, Big
        )

    [4] => Array
        (
            [product_id] => 4,
            [combination_string] => Red, 256 GB, Big
        )

    [5] => Array
        (
            [combination_string] => Red, 512 GB, Big
        )

)
</pre>
function cartesian($input) {
    $result = array(array());

    foreach ($input as $key => $values) {
        $append = array();

        foreach($result as $product) {
            foreach($values as $item) {
                $product[$key] = $item;
                $append[] = $product;
            }
        }

        $result = $append;
    }

    return $result;
}