商品多规格SKU在PHP中的实现方式及详解

1. 概述

在电商网站中,商品的多规格SKU(Stock Keeping Unit)的管理是非常重要的,可以方便用户选择自己需要的商品规格并完成购买,也方便商家管理商品库存等信息。

本文将从实现方式、数据存储与查询、前后端交互等方面进行全面解析,给出一个SKU管理的基本架构。

2. 实现方式

2.1 SKU的定义

SKU是指商品的库存单位,不同规格的商品都有不同的SKU,每个SKU都有自己的库存量、价格等信息。

例如,一款T恤衫商品,可以有不同的规格:颜色(红、蓝、白)、尺码(S、M、L、XL)。每个规格都会对应不同的SKU,如红色S码的SKU为1001,红色M码的SKU为1002,依次类推。

2.2 SKU的实现

实现SKU可以使用多种方式,常见的有二维数组、关联数组、二进制数等。

本文将以关联数组的方式实现SKU。关联数组以商品规格组合为键,以商品信息(如库存量、价格)为值,可以用一个数组来存储。

下面是一个SKU关联数组的示例:

$sku_data = array(

'红色-S' => array('price' => 20, 'stock' => 50, 'sku_code' => '1001'),

'红色-M' => array('price' => 22, 'stock' => 100, 'sku_code' => '1002'),

'红色-L' => array('price' => 24, 'stock' => 80, 'sku_code' => '1003'),

'红色-XL' => array('price' => 26, 'stock' => 30, 'sku_code' => '1004'),

'蓝色-S' => array('price' => 20, 'stock' => 80, 'sku_code' => '1005'),

'蓝色-M' => array('price' => 22, 'stock' => 60, 'sku_code' => '1006'),

'蓝色-L' => array('price' => 24, 'stock' => 50, 'sku_code' => '1007'),

'蓝色-XL' => array('price' => 26, 'stock' => 40, 'sku_code' => '1008'),

'白色-S' => array('price' => 20, 'stock' => 70, 'sku_code' => '1009'),

'白色-M' => array('price' => 22, 'stock' => 80, 'sku_code' => '1010'),

'白色-L' => array('price' => 24, 'stock' => 60, 'sku_code' => '1011'),

'白色-XL' => array('price' => 26, 'stock' => 50, 'sku_code' => '1012'),

);

3. 数据存储与查询

3.1 数据存储

SKU数据可以使用数据库、文件或缓存等方式进行存储。

当SKU数据量较大时,使用数据库进行存储是比较好的选择。可以使用MySQL等关系型数据库,或者NoSQL等非关系型数据库来存储SKU数据。

以MySQL为例,可以使用以下的SQL语句来创建SKU的数据表:

CREATE TABLE `sku` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',

`sp1` varchar(255) NOT NULL COMMENT '规格 1',

`sp2` varchar(255) NOT NULL COMMENT '规格 2',

`sp3` varchar(255) NOT NULL COMMENT '规格 3',

`sku_code` varchar(255) NOT NULL COMMENT 'SKU编码',

`price` decimal(10,2) NOT NULL COMMENT '价格',

`stock` int(11) NOT NULL COMMENT '库存',

PRIMARY KEY (`id`),

KEY `idx_sp1` (`sp1`),

KEY `idx_sp2` (`sp2`),

KEY `idx_sp3` (`sp3`),

KEY `idx_sku_code` (`sku_code`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='SKU表';

其中sp1、sp2、sp3为自定义的规格名称,可根据实际情况进行更改。

可以使用以下的PHP代码向SKU表中插入数据:

$mysqli = new mysqli('localhost', 'root', 'password', 'test');

if ($mysqli->connect_errno) {

die('Connect Error: ' . $mysqli->connect_errno);

}

$sp1_array = array("红色", "蓝色", "白色");

$sp2_array = array("S", "M", "L", "XL");

foreach ($sp1_array as $sp1) {

foreach ($sp2_array as $sp2) {

$sku_code = 'SKU-' . mt_rand(100000, 999999);

$price = mt_rand(10, 50);

$stock = mt_rand(50, 100);

$sql = "INSERT INTO sku (sp1, sp2, sku_code, price, stock) VALUES ('$sp1', '$sp2', '$sku_code', $price, $stock)";

$mysqli->query($sql);

}

}

$mysqli->close();

以上代码将生成12个SKU,每个SKU对应一个不同的规格组合。

3.2 数据查询

当用户在网站上选择商品规格时,需要根据所选规格去查询相应的SKU信息。

以MySQL为例,可以使用以下的PHP代码查询SKU信息:

$mysqli = new mysqli('localhost', 'root', 'password', 'test');

if ($mysqli->connect_errno) {

die('Connect Error: ' . $mysqli->connect_errno);

}

$sp1 = $_POST['sp1'];

$sp2 = $_POST['sp2'];

$sql = "SELECT * FROM sku WHERE sp1='$sp1' AND sp2='$sp2'";

$result = $mysqli->query($sql);

$row = $result->fetch_assoc();

$id = $row['id'];

$price = $row['price'];

$stock = $row['stock'];

$sku_code = $row['sku_code'];

$mysqli->close();

以上代码将查询所选规格对应的SKU信息,并将结果存储在变量中供后续使用。

4. 前后端交互

4.1 页面展示

在电商网站中,SKU的管理需要结合前端页面来实现。当用户选择不同的规格时,页面需要及时更新SKU信息。

可以使用JavaScript实现页面动态更新,如下:

$(":radio[name=sp1]").click(function(){

var sp1 = $(this).val();

var sp2 = $("input[name=sp2]:checked").val();

$.ajax({

url: "/get_sku_info.php",

type: "POST",

data: {"sp1": sp1, "sp2": sp2},

dataType: "json",

success: function(data){

$(".price").html(data.price);

$(".stock").html(data.stock);

$(".sku_code").html(data.sku_code);

}

});

});

$(":radio[name=sp2]").click(function(){

var sp1 = $("input[name=sp1]:checked").val();

var sp2 = $(this).val();

$.ajax({

url: "/get_sku_info.php",

type: "POST",

data: {"sp1": sp1, "sp2": sp2},

dataType: "json",

success: function(data){

$(".price").html(data.price);

$(".stock").html(data.stock);

$(".sku_code").html(data.sku_code);

}

});

});

以上代码将监听页面中规格选项的点击事件,并通过Ajax向后端发起请求,返回查询到的SKU信息并更新页面上的价格、库存量和SKU编码等信息。

4.2 后端响应

当接收到前端发来的请求后,后端需要进行相应的处理,查询SKU信息并返回查询结果。

以PHP为例,可以编写如下的代码实现:

$sp1 = $_POST['sp1'];

$sp2 = $_POST['sp2'];

$sku_data = array(

'红色-S' => array('price' => 20, 'stock' => 50, 'sku_code' => '1001'),

'红色-M' => array('price' => 22, 'stock' => 100, 'sku_code' => '1002'),

'红色-L' => array('price' => 24, 'stock' => 80, 'sku_code' => '1003'),

'红色-XL' => array('price' => 26, 'stock' => 30, 'sku_code' => '1004'),

'蓝色-S' => array('price' => 20, 'stock' => 80, 'sku_code' => '1005'),

'蓝色-M' => array('price' => 22, 'stock' => 60, 'sku_code' => '1006'),

'蓝色-L' => array('price' => 24, 'stock' => 50, 'sku_code' => '1007'),

'蓝色-XL' => array('price' => 26, 'stock' => 40, 'sku_code' => '1008'),

'白色-S' => array('price' => 20, 'stock' => 70, 'sku_code' => '1009'),

'白色-M' => array('price' => 22, 'stock' => 80, 'sku_code' => '1010'),

'白色-L' => array('price' => 24, 'stock' => 60, 'sku_code' => '1011'),

'白色-XL' => array('price' => 26, 'stock' => 50, 'sku_code' => '1012'),

);

$key = $sp1 . '-' . $sp2;

$result = array();

if(isset($sku_data[$key])) {

$result['price'] = $sku_data[$key]['price'];

$result['stock'] = $sku_data[$key]['stock'];

$result['sku_code'] = $sku_data[$key]['sku_code'];

}

echo json_encode($result);

以上代码将接收到的规格信息与SKU数据进行匹配,并返回对应的SKU信息。

5. 总结

本文对SKU的实现方式、数据存储与查询、前后端交互等方面进行了全面的解析,给出了一个SKU管理的基本架构。

SKU作为一种商品库存管理的方式,具有重要的作用。在电商网站的开发中,合理使用SKU技术可以为用户提供更加便捷的购物体验,也可以为商家的库存管理带来更好的效率。

后端开发标签