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

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

一、思路

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

【方法一】

  • 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 '结果为
'
; if ($updateGoodsData) { //$goodsDao->updateAll($updateGoodsData); //批量下架商品 } var_export($updateGoodsData); } public function method1($goodsIdToDetail, &$updateGoodsData) { foreach ($goodsIdToDetail as $goodsId => $value) { $stockStatus = []; //库存状态一维数组:false-库存等于0;true-库存大于0 foreach ($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数据处理,php,php数组处理)