首页 > 解决方案 > 根据选项生成产品组合

问题描述

我正在尝试基于 2 种或更多类型的选项生成产品组合系统,其中最终数组应如下例所示。我对此有点陌生,我不知道该怎么做。它们的数组键应该从 1000 开始并从那里递增。数组的第一部分包含有关选项的信息,例如 option_id 名称等,第二部分包含 product_option_value 中产品的某些部分。任何建议或帮助都会有所帮助,因为我没有想法,这非常令人沮丧。

给定一系列选项

Array
(
    [0] => Array
        (
            [option_id] => 19
            [name] => Colors
        )

    [1] => Array
        (
            [option_id] => 16
            [name] => Fabric
        )

    [2] => Array
        (
            [option_id] => 12
            [name] => Size
        )

)

我的产品基于颜色排列

Array
(
    [0] => Array
        (
            [product_id] => 54
            [model] => 01035
            [sku] => 050102/bs
        )

    [1] => Array
        (
            [product_id] => 57
            [model] => 01038
            [sku] => 050104/b
        )

    [2] => Array
        (
            [product_id] => 58
            [model] => 01039
            [sku] => 050106/C
        )

)


stdClass Object
(
    [10010] => stdClass Object
        (
            [product_option_id] => 
            [name] => option_name_1
            [value] => option_name_1-option_name_2-option_name_3:::0
            [product_option_value] => stdClass Object
                (
                    [12] => stdClass Object
                        (
                            [option_value_id] => 849
                            [product_option_value_id] => 
                            [model] => repellendus nemo ve-050102/bs
                        )

                    [15] => stdClass Object
                        (
                            [option_value_id] => 861
                            [product_option_value_id] => 
                            [model] => repellendus nemo ve-050104/b
                        )

                )

        )

    [10011] => stdClass Object
        (
            [product_option_id] => 
            [name] => option_name_1-option_name_2-option_name_3
            [value] => option_name_1-option_name_2-option_name_3:::0-849
            [product_option_value] => stdClass Object
                (
                    [13] => stdClass Object
                        (
                            [option_value_id] => 2407
                            [product_option_value_id] => 
                            [model] => repellendus nemo ve-050102/bs-050102/bs
                        )

                )

        )

    [10012] => stdClass Object
        (
            [product_option_id] => 
            [name] => option_name_1-option_name_2-option_name_3
            [value] => option_name_1-option_name_2:::0-849-2407
            [product_option_value] => stdClass Object
                (
                    [14] => stdClass Object
                        (
                            [option_value_id] => 2884
                            [product_option_value_id] => 
                            [model] => repellendus nemo ve-050102/bs-050102/bs-050102/bs
                        )

                )

        )

    [10013] => stdClass Object
        (
            [product_option_id] => 
            [name] => option_name_1-option_name_2
            [value] => option_name_1-option_name_2:::0-861
            [product_option_value] => stdClass Object
                (
                    [16] => stdClass Object
                        (
                            [option_value_id] => 2407
                            [product_option_value_id] => 
                            [model] => repellendus nemo ve-050104/b-050102/bs
                        )

                )

        )

    [10014] => stdClass Object
        (
            [product_option_id] => 
            [name] => option_name_1-option_name_2-option_name_3
            [value] => option_name_1-option_name_2-option_name_3:::0-861-2407

            [product_option_value] => stdClass Object
                (
                    [17] => stdClass Object
                        (
                            [option_value_id] => 2884
                            [model] => repellendus nemo ve-050104/b-050102/bs-050102/bs

                        )

                )

        )
)

目前,我已经设法构建了“包含基本产品的第一个数组”,但它没有与选项名称连接的名称

            $something = function ($cell, $optionName) {
                $cOption = $this->getOptionByName($optionName, $cell);
                return [
                    "product_option_id" => "",
                    'option_value_id' => 0,
                    'option_val_id' => $cOption['option_value_id'],
                    "name" => $cOption['name'],
                    "value" => $cOption['name'],
                    "option_id" => $cOption['option_id'],

                    "required" => 0,
                    "swatch_image" => 0,
                    "show_first_option_in_list" => "1",
                    "product_option_value" => []
                ];

            };


            $products = [];
            $baseProduct = [];
            $i = 1000;
            for ($c = 4; $c <= 7; $c++) {
                if (!empty($cell[$c])) {
                    $baseProduct = $another($cell[$c], 'Related Colors');
                    $baseProduct['name'] = $baseProduct['name'] .  ':::0';
                    $baseProduct['value'] = $baseProduct['value'] . ':::0';
                    $product = $this->getProductBySku($cell[$c]);
                    $relatedColors[] = $product;
                }
            }
            $baseProduct['product_option_value'] = $relatedColors;
            $products[$i++] = $baseProduct;

这是一个视觉表示,如果阵列构建正确,正面应该如何显示。 最终结果

标签: phparrays

解决方案


推荐阅读