IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 模拟库存出库商品 -> 正文阅读

[PHP知识库]PHP 模拟库存出库商品

一、需求

已知:库存数据,商品数据。
求:库存剩余数据,出库的商品数据,库存不足/不存在的数据
Tips:根据商品编码扣减库存中的商品数量

二、代码

public function test() {
    list($stockData, $goodsData) = self::getData(); //获取库存数据、商品数据

    $errorMsg = []; //定义出库失败数据
    $stockOutData = []; //定义出库数据

    //已知product_name唯一,处理库存数据以product_name为键
    $stockProductName = array_combine(array_column($stockData, 'product_name'), $stockData);

    self::stockProcess($goodsData, $stockProductName, $stockOutData, $errorMsg);

    //打印结果数据
    echo '<pre>';
    echo '库存剩余数据:<br/>';
    var_export($stockProductName);
    echo '<br/>出库数据:<br/>';
    var_export($stockOutData);
    echo '<br/>出库失败信息:<br/>';
    var_export($errorMsg);
}

/**
 * 返回库存数据、商品数据
 * @return array
 */
public function getData() {
    //库存数据
    $stockData = [
        ['product_name' => 'Goods123', 'number' => 10],
        ['product_name' => 'Goods456', 'number' => 20],
        ['product_name' => 'Goods789', 'number' => 30],
    ];

    //商品数据
    $goodsData = [
        ['goods_name' => '商品1', 'stock_code' => 'Goods123', 'buy_number' => 7],
        ['goods_name' => '商品2', 'stock_code' => 'Goods123', 'buy_number' => 7],
        ['goods_name' => '商品3', 'stock_code' => 'Goods456', 'buy_number' => 7],
        ['goods_name' => '商品4', 'stock_code' => 'Goods456', 'buy_number' => 7],
        ['goods_name' => '商品5', 'stock_code' => 'Goods456', 'buy_number' => 7],
        ['goods_name' => '商品6', 'stock_code' => 'Goods789', 'buy_number' => 30],
        ['goods_name' => '商品7', 'stock_code' => 'Goods321', 'buy_number' => 3],
    ];

    return [$stockData, $goodsData];
}

/**
 * 库存处理方法
 * @param array $goodsData 商品数据
 * @param array $stockProductName 库存编码对应的数据
 * @param array $stockOutData 出库数据
 * @param array $errorMsg 出库失败数据
 */
public function stockProcess($goodsData, &$stockProductName, &$stockOutData, &$errorMsg) {
    //把商品数据循环出库
    foreach ($goodsData as $value) {
        $goodsName = $value['goods_name'];
        $stockCode = $value['stock_code'];
        $buyNumber = $value['buy_number'];

        $msg = "商品 [ {$goodsName} ],编码 [ {$stockCode} ]:";

        $stockInfo = isset($stockProductName[$stockCode]) ? $stockProductName[$stockCode] : [];
        if (!$stockInfo) {
            $errorMsg[] = "{$msg}库存不存在";
            continue;
        }

        if ($stockInfo['number'] < $buyNumber) {
            $errorMsg[] = "{$msg}库存不足";
            continue;
        }

        //扣减库存数量 = 已有数量 - 商品数量
        $stockProductName[$stockCode]['number'] -= $buyNumber;

        //组装出库数据
        $stockOutData[] = [
            'product_name' => $stockCode,
            'out_number' => $buyNumber
        ];
    }
}

三、打印

库存剩余数据:
array (
  'Goods123' => 
  array (
    'product_name' => 'Goods123',
    'number' => 3,
  ),
  'Goods456' => 
  array (
    'product_name' => 'Goods456',
    'number' => 6,
  ),
  'Goods789' => 
  array (
    'product_name' => 'Goods789',
    'number' => 0,
  ),
)
出库数据:
array (
  0 => 
  array (
    'product_name' => 'Goods123',
    'out_number' => 7,
  ),
  1 => 
  array (
    'product_name' => 'Goods456',
    'out_number' => 7,
  ),
  2 => 
  array (
    'product_name' => 'Goods456',
    'out_number' => 7,
  ),
  3 => 
  array (
    'product_name' => 'Goods789',
    'out_number' => 30,
  ),
)
出库失败信息:
array (
  0 => '商品 [ 商品2 ],编码 [ Goods123 ]:库存不足',
  1 => '商品 [ 商品5 ],编码 [ Goods456 ]:库存不足',
  2 => '商品 [ 商品7 ],编码 [ Goods321 ]:库存不存在',
)
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:31:11  更:2021-11-11 12:31:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:27:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码