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 '结果为<br/>';
    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, ), )

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/111612871
今日推荐