【问题标题】:Creating Combinations from the array - Laravel Collect(crossJoin) Method从数组创建组合 - Laravel Collect(crossJoin) 方法
【发布时间】:2020-12-27 04:31:20
【问题描述】:

我正在尝试根据通过表单收到的回复创建产品组合。

如何将数组项传递给 collect 以便创建组合

      $newContent = array();
            foreach (array($request['varationsArray']) as $record) {
                $newContent[] = $record;
            }
    
            print_r($newContent);
   
       //Result
            // Array
            // (
            //     [0] => {"1":["Medium"],"2":["White","Blue"],"3":["Small","Large"]}
            // )

最近了解到 Laravel 有一个内置方法 - Collection crossJoin() 来完成它。

所以我希望将组合保存到数据库中,以便我可以稍后检索它。

尝试收集结果(新内容)。

     $variations = collect($newContent);
            $variations_options = $variations->crossJoin($newContent);
    
            print_r($variations_options->all());
    
            Array
       (
        [0] => Array
            (
                [0] => {"1":["Medium"],"2":["White","Blue"]}
                [1] => {"1":["Medium"],"2":["White","Blue"]}
            )
    
       )

我希望将结果保存在数据库中,例如,

    product_combination 
    -------------------
    Medium-White
    Medium-Blue
    Medium
    Medium-White-Large
    ....

但我无法解析上述结果。

请简要介绍如何处理这些类型的数组。

【问题讨论】:

    标签: php arrays laravel laravel-5 eloquent


    【解决方案1】:

    你必须先阅读 laravel 文档。 https://laravel.com/docs/7.x/collections#method-crossjoin

    $collection = collect([1, 2]);
    
    $matrix = $collection->crossJoin(['a', 'b']);
    
    $matrix->all();
    
    /*
        [
            [1, 'a'],
            [1, 'b'],
            [2, 'a'],
            [2, 'b'],
        ]
    */
    
    $collection = collect([1, 2]);
    
    $matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
    
    $matrix->all();
    
    /*
        [
            [1, 'a', 'I'],
            [1, 'a', 'II'],
            [1, 'b', 'I'],
            [1, 'b', 'II'],
            [2, 'a', 'I'],
            [2, 'a', 'II'],
            [2, 'b', 'I'],
            [2, 'b', 'II'],
        ]
    */
    

    最后,如果您想将其保存在由破折号连接的数据库中,您可以使用此功能:

    implode('-',$crossJoinedArray)
    

    【讨论】:

    • 我已经用更多数据更新了我的问题。如何将数组项传递给集合以便创建组合
    • 你能解释更多吗,对不起,我不明白你的问题到底是什么。
    • 我正在尝试从上述数组创建组合。由于它没有静态密钥,我无法将它们传递给收集器。
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2011-02-04
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多