# 商品規格選擇
# laramall
首先查一下貨品表

然后訪問地址:http://laramall.jiezeal.com/home/goodsDetail/2

可以看到商品 榮耀8青春版
有三個規格: 顏色、版本、套裝
ID分別是 1、2、3
**顏色**擁有4個規格值:
流光金、珠光白、幻夜黑、幻海藍
ID分別是 1、2、3、4
**版本**擁有3個規格值:
全網通(3GB 32GB)、全網通(4GB 32GB)、全網通(4GB 64GB)
ID分別是 5、6、7
**套裝**擁有1個規格值:
官方標配
ID為 8
通過url可以知道我們現在看到的是2號貨品,通過貨品表可以知道2號貨品的規格情況是:"{"1": "1", "2": "6", "3": "8"}",在頁面的顯示是紅色實線
那么現在我們可以點的有:
珠光白、幻夜黑、全網通(3GB 32GB)
如果我們點**珠光白**,那么就會產生一個新的組合:
珠光白+全網通(3GB 32GB)+官方標配,即:
"{"1": "2", "2": "6", "3": "8"}"

如果我們點**全網通(3GB 32GB)**,就是:
"{"1": "1", "2": "5", "3": "8"}"

但不管我們點**珠光白**還是**全網通(3GB 32GB)**,都意味著另外的兩個規格會和新點擊的這個規格組成一個新的組合
也就是說有2個規格是不會變的,只有一個規格是會變化的
通過這個規律,我們就可以把2號貨品的規格進行兩兩排列組合
```
array:3 [▼
0 => "1:1@2:6"
1 => "1:1@3:8"
2 => "2:6@3:8"
]
```
然后去獲取滿足所有組合條件的貨品規格
```
array:4 [▼
0 => "{"1": "1", "2": "6", "3": "8"}"
1 => "{"1": "1", "2": "5", "3": "8"}"
3 => "{"1": "2", "2": "6", "3": "8"}"
4 => "{"1": "3", "2": "6", "3": "8"}"
]
```
然后轉換格式并去重
```
array:6 [▼
0 => "1:1"
1 => "2:6"
2 => "3:8"
4 => "2:5"
6 => "1:2"
9 => "1:3"
]
```
也就是說 1:1、1:2、1:3、2:5、2:6、3:8 是滿足所有組合條件的貨品規格,在頁面顯示的就是灰色實線。而 1:4、2:7 是不滿足的,因此在頁面顯示的就是灰色虛線。
那如果這個貨品有4個規格呢?
如:http://laramall.jiezeal.com/home/goodsDetail/10
只需要在排列組合的時候按照3個進行排列組合就可以了
如果有5個規格,則按4個進行排列組合
多個同理 ...
排列組合參考文章:
http://blog.csdn.net/song5198038_1/article/details/50188739