Exemplo n.º 1
0
 protected function generateCartesian(Product $product)
 {
     $attributeOptions = $product->getAttributeOptions();
     $attributesArray = $attributeOptions->groupBy('attribute_group_id')->map(function (Collection $attributeOptionsByGroup) {
         return $attributeOptionsByGroup->pluck('id');
     })->toArray();
     $result = [];
     while (list($key, $values) = each($attributesArray)) {
         if (empty($values)) {
             continue;
         }
         if (empty($result)) {
             foreach ($values as $value) {
                 $result[] = [$key => $value];
             }
         } else {
             $append = [];
             foreach ($result as &$product) {
                 $product[$key] = array_shift($values);
                 $copy = $product;
                 foreach ($values as $item) {
                     $copy[$key] = $item;
                     $append[] = $copy;
                 }
                 array_unshift($values, $product[$key]);
             }
             $result = array_merge($result, $append);
         }
     }
     foreach ($result as &$array) {
         sort($array);
     }
     return collect($result);
 }