• 一、思路
  • 二、代码
  • 三、打印结果

一、思路

思路千万种,我这里给出自己的实现思路 ~

【方法一】

  • 1、把货品数据处理成以商品ID为键的二维数组$goodsIdToDetail
  • 2、循环处理$goodsIdToDetail,定义数组$stockStatus存放货品库存状态
  • 3、如果库存大于0,则$stockStatus[] = true;;否则为false
  • 4、处理数组$stockStatus:数组去重,索引重置,得到$uniqueStatus
  • 5、判断$uniqueStatus$uniqueStatus个数为1,并且值为false。则说明该商品的所有货品库存都为0,下架该商品

【方法二(推荐)】

  • 1、把货品数据处理成以商品ID为键的二维数组$goodsIdToDetail
  • 2、循环处理$goodsIdToDetail,定义字段$shelfOff判断货品库存,默认为true
  • 3、循环货品,如果货品库存大于0,则设置$shelfOfffalse,跳出货品循环
  • 4、根据$shelfOff字段判断商品是否需要下架:$shelfOfftrue,则下架该商品

【对比】

  • 很明显:方法二优于方法一

二、代码

public function test() {//商品数据$goodsList = [ //这个变量这里暂时没用到~['id' => 1, 'name' => '商品1', 'shelf_on' => 1], //shelf_on:0-下架;1-上架['id' => 2, 'name' => '商品2', 'shelf_on' => 1],['id' => 3, 'name' => '商品3', 'shelf_on' => 1],];//货品数据$goodsDetailList = [['id' => 1, 'goods_id' => 1, 'stock' => 1],['id' => 2, 'goods_id' => 1, 'stock' => 3],['id' => 3, 'goods_id' => 2, 'stock' => 0],['id' => 4, 'goods_id' => 3, 'stock' => 1],['id' => 5, 'goods_id' => 3, 'stock' => 3],['id' => 6, 'goods_id' => 3, 'stock' => 0],];//处理数据:[ 商品Id 对应 货品 ] 二维数组$goodsIdToDetail = [];foreach ($goodsDetailList as $value) {$goodsIdToDetail[$value['goods_id']][] = $value;}$updateGoodsData = []; //定义待更新的商品数据//self::method1($goodsIdToDetail, $updateGoodsData);self::method2($goodsIdToDetail, $updateGoodsData);echo '结果为<br/>';if ($updateGoodsData) {//$goodsDao->updateAll($updateGoodsData); //批量下架商品}var_export($updateGoodsData);
}public function method1($goodsIdToDetail, &$updateGoodsData) {foreach ($goodsIdToDetail as $goodsId => $value) {$stockStatus = []; //库存状态一维数组:false-库存等于0;true-库存大于0foreach ($value as $item) {if ($item['stock'] > 0) {$stockStatus[] = true; //库存大于0} else {$stockStatus[] = false; //库存等于0}}//根据$stockStatus一维数组判断商品是否需要下架:商品下的所有货品库存为0时,商品下架//具体做法为:数组去重,索引重置;判断结果:个数为1,并且值为false。则这个商品货品库存都为0,该商品需要自动下架~$uniqueStatus = array_values(array_unique($stockStatus));if ((count($uniqueStatus) == 1) && ($uniqueStatus[0] == false)) {$updateGoodsData[] = ['id' => $goodsId,'shelf_on' => 0,];}}
}public function method2($goodsIdToDetail, &$updateGoodsData) {foreach ($goodsIdToDetail as $goodsId => $value) {$shelfOff = true; //默认下架:如果有库存大于0的,则修改状态,跳出循环foreach ($value as $item) {if ($item['stock'] > 0) {$shelfOff = false;break;}}if ($shelfOff) { //如果下架值为true,则下架该商品$updateGoodsData[] = ['id' => $goodsId,'shelf_on' => 0,];}}
}

三、打印结果

结果为
array ( 0 => array ( 'id' => 2, 'shelf_on' => 0, ), )

PHP如果某商品下的所有货品库存都为0,则下架该商品相关推荐

  1. 淘宝一键下架在售商品步骤

    最近淘宝商家对于如何快速一键上下架商品,如何选择上货工具上下架在售和仓库商品比较闹心,市面上很多淘宝一键上下架工具,不是每个软件都是靠谱和实用的,很多商家在选错上下架工具方面吃不少亏,现在刚好是换季上 ...

  2. 【电商经验】之商品下单减库存方案

    一.下单减库存方案 在电商项目中设计商品下单减库存时有两种典型的方案: 下单后减库存 付款后减库存 这两种减库存方案都有各自的优缺点,没有说哪种是最好的,主要看业务场景适合哪种. 1.下单后减库存 用 ...

  3. 拼多多api商品详情数据接口货品采集

    item_get-根据ID取商品详情 注册开通key测试 万邦拼多多根据ID取商品详情 API 返回值说明 item_get-根据ID取商品详情 onebound.pinduoduo.item_get ...

  4. 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...

    前言 之前一直有小伙伴私信我问我高并发场景下的订单和库存处理方案,我最近也是因为加班的原因比较忙,就一直没来得及回复.今天好不容易闲了下来想了想不如写篇文章把这些都列出来的,让大家都能学习到,说一千道 ...

  5. eas库存状态调整单不能反审核_把握 商品 周转,做好 动态 库存 管理

    ​ 许多门店单纯追求高额的销售和利润,却往往忽视日常的库存管理,造成商品库存大量积压的情况,形成资金呆滞,影响其周转和商品的闲置,导致后期商品的损耗,不利于门店后期的运作和发展. 在保证门店正常运营的 ...

  6. asp毕业设计——基于asp+access的商品销售网站设计与实现(毕业论文+程序源码)——商品销售网

    基于asp+access的商品销售网设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的商品销售网设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: ...

  7. php找不到localhost下的文件夹,我在localhost里找不到shopImooc下的文件,每次都要手动输入地址,还有就是index.php每次打开都是这样的页面,是数据库没连吗...

    源自:4-1 商品图片上传 我在localhost里找不到shopImooc下的文件,每次都要手动输入地址,还有就是index.php每次打开都是这样的页面,是数据库没连吗 Notice:  Unde ...

  8. java分布式库存系统_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...

    前言 之前一直有小伙伴私信我问我高并发场景下的订单和库存处理方案,我最近也是因为加班的原因比较忙,就一直没来得及回复.今天好不容易闲了下来想了想不如写篇文章把这些都列出来的,让大家都能学习到,说一千道 ...

  9. python尝试不同的随机数进行数据划分、使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性、数据划分合理

    python尝试不同的随机数进行数据划分.使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征(categorical)的卡方检验的p值,如果所有p值都大于0.05则退出循环.则训练集和测试 ...

  10. SAP MM 没有启用QM的前提下可以从QI库存里退货给Vendor?

    SAP MM 没有启用QM的前提下可以从QI库存里退货给Vendor? 经过验证是可以的.比如如下退货采购订单, 数量是10,勾选了"Return Items"选项, VL10B, ...

最新文章

  1. “期待已久的UFO报告”公布了
  2. 打开 XP Pro SP2 远程桌面的多用户支持
  3. 数论--康托展开与逆康托展开模板
  4. STS的安装教程-鹏鹏
  5. 如何建立队列c语言_什么是优先队列
  6. 安装apache-2.2.6, php-5.2.5, mysql-5.0.2的过程
  7. 四种常见排序算法----php代码实现
  8. 如何使用fiddler 4进行手机模拟器抓包详细教程
  9. python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
  10. Android车机之TextToSpeech
  11. 解决Permission denied: user=root, access=WRITE, inode=“/“:root:supergroup:drwxr-xr-x问题
  12. 解决 fast api “detail“: “There was an error parsing the body“问题
  13. csp-j/s组第一轮测试140题版本模拟试题及解析
  14. 教您如何查看Win7详细系统版本号
  15. 公共数据库介绍~OECD经合组织数据库
  16. 解决Flex项目下bin-debug文件在其他电脑打开不显示的问题
  17. 联合证券|再创纪录,外资狂买超1000亿!券商、期货板块持续活跃
  18. CDOJ-1057 秋实大哥与花(线段树区间更新)
  19. Microsoft 智能手机(Smartphone)C#开发入门
  20. 深圳软件测试培训:Jmeter目录构成

热门文章

  1. x86系统微型计算机,80x86/Pentium 微型计算机原理及应用(第3版)
  2. vscode配置c++11
  3. 用matplotlib中的scatter方法画散点图
  4. python 迭代器与生成器 详解
  5. sql语句查询执行顺序
  6. 乐山计算机学校搬迁,【骨头再次发贴】谈谈新校区。
  7. mysql innodb远程备份_详细说明MySQL备份、还原、innoDB打开
  8. java中事物的注解_JAVA中对事物的理解
  9. myisam为什么比innodb查询快_那些还不会MySQL锁的程序员们,求你快看看这篇文章吧...
  10. phpstudy apache启动不了,也不报错误日志