[关闭]
@qq286531097 2017-02-24T08:05:58.000000Z 字数 3155 阅读 216

在此处输入标题

未分类


商品数据

item_id price
200055 699
200708 498

活动: 全品类 -> 满100减10

  1. $itemsInfo =
  2. Array
  3. (
  4. [0] => 200055
  5. [1] => 200708
  6. )
  7. $priceCount = 1197
  8. $cutPrice = 10
  9. $apiData =
  10. Array
  11. (
  12. [itemPrice] => Array
  13. (
  14. [200055] => Array
  15. (
  16. [priceInitial] => 699
  17. [priceCount] => 699
  18. [priceInfo] => Array
  19. (
  20. [0] => 699.000
  21. )
  22. [pointInfo] => Array
  23. (
  24. [0] => 2.44
  25. )
  26. [pointCount] => 2.44
  27. [price] => 699.000|0
  28. [integration] => 699.000|0
  29. [num] => 1
  30. )
  31. [200708] => Array
  32. (
  33. [priceInitial] => 996
  34. [priceCount] => 996
  35. [priceInfo] => Array
  36. (
  37. [0] => 498.000
  38. [1] => 498.000
  39. )
  40. [pointInfo] => Array
  41. (
  42. [0] => 1.74
  43. [1] => 1.74
  44. )
  45. [pointCount] => 3.48
  46. [price] => 498.000|0,498.000|0
  47. [integration] => 498.000|0,498.000|0
  48. [num] => 2
  49. )
  50. )
  51. [items] => Array
  52. (
  53. [0] => Array
  54. (
  55. [promotions_id] => 3
  56. [active_id] => 3
  57. [tag] => fullminus
  58. [price] => 1695
  59. [item_ids] => 200055,200708
  60. [cutPrice] => 10
  61. [whisper] =>
  62. [condition_value] => 100|10
  63. [total_price] => 1685
  64. [sort_order] => 1
  65. [exclusive] => 0
  66. [promotion_name] => 10010
  67. [promotion_tag] => 满减
  68. [extraDiscount] => 0
  69. [activeOrCoupon] => 2
  70. [subpayment] =>
  71. [address] =>
  72. [itemPrice] => Array
  73. (
  74. [200055] => Array
  75. (
  76. [priceInitial] => 699
  77. [priceCount] => 699
  78. [pointCount] => 2.44
  79. [price] => 699.000|0
  80. [point] => 2.44|0
  81. [integration] => 699.000|0
  82. [order] => 0
  83. [num] => 1
  84. [orderPrice] => Array
  85. (
  86. [0] => 699.000
  87. )
  88. [orderPoint] => Array
  89. (
  90. [0] => 2.44
  91. )
  92. )
  93. [200708] => Array
  94. (
  95. [priceInitial] => 996
  96. [priceCount] => 996
  97. [pointCount] => 3.48
  98. [price] => 498.000|0,498.000|0
  99. [point] => 1.74|0,1.74|0
  100. [integration] => 498.000|0,498.000|0
  101. [order] => 0,1
  102. [num] => 2
  103. [orderPrice] => Array
  104. (
  105. [0] => 498.000
  106. [1] => 498.000
  107. )
  108. [orderPoint] => Array
  109. (
  110. [0] => 1.74
  111. [1] => 1.74
  112. )
  113. )
  114. )
  115. [check] => 1
  116. )
  117. )
  118. [price] => Array
  119. (
  120. [price] => 1695
  121. )
  122. )

实现代码核心

  1. public function itemMinPrice($itemsInfo,$priceCount,$cutPrice,&$apiData,$acticeId){
  2. //不是折上折的满减数据[itemInfo]{商品集合} [总价] [cutprice] [apidata] [活动ID]
  3. //算出各自占的比例
  4. $count = count($itemsInfo);
  5. //重置输出变量
  6. $arr = array();
  7. foreach ($itemsInfo as $k => $v) {
  8. if ($k != $count - 1) {
  9. //总共此商品要减去的钱数
  10. $itemCutPrice = intval(round(((($apiData['items'][$acticeId]['itemPrice'][$v]['priceInitial']/$priceCount)*100))*$cutPrice)/100);
  11. //获得活动内该itemId下价格下所有的数量
  12. $itemCount = count(explode( ',', $apiData['items'][$acticeId]['itemPrice'][$v]['price']));
  13. //循环出该商品的所有的价格,然后根据该价格重新拼成字符串
  14. foreach (explode( ',', $apiData['items'][$acticeId]['itemPrice'][$v]['price']) as $m => $n) {
  15. if ($m != $itemCount - 1) {
  16. //小数位四舍五入
  17. $arr[$v][$m] = substr($n,0,strpos($n,'|')).'|'.intval(round((((substr($n,0,strpos($n,'|'))-substr($n,(strpos($n,'|')+1)))/$apiData['items'][$acticeId]['itemPrice'][$v]['priceInitial'])*100*$itemCutPrice)/100));
  18. $arrPrice += substr($arr[$v][$m],(strpos($arr[$v][$m],'|')+1));
  19. }else{
  20. //算出剩余的数据
  21. $arr[$v][$m] = substr($n,0,strpos($n,'|')).'|'.(($itemCutPrice - $arrPrice));
  22. }
  23. }
  24. $pctPrice += $itemCutPrice;
  25. }else{
  26. //获得最后一个剩余的钱数
  27. $lastPrice = $cutPrice - $pctPrice;
  28. //获得活动内该itemId下价格下所有的数量
  29. $itemcount = count(explode( ',', $apiData['items'][$acticeId]['itemPrice'][$v]['price']));
  30. //循环出该商品的所有的价格,然后根据该价格重新拼成字符串
  31. foreach (explode( ',', $apiData['items'][$acticeId]['itemPrice'][$v]['price']) as $m => $n) {
  32. if ($m != $itemcount - 1) {
  33. $arr[$v][$m] = substr($n,0,strpos($n,'|')).'|'.intval(floor((((substr($n,0,strpos($n,'|'))-substr($n,(strpos($n,'|')+1)))/$apiData['items'][$acticeId]['itemPrice'][$v]['priceInitial'])*100*$lastPrice)/100));
  34. $arr_price += substr($arr[$v][$m],(strpos($arr[$v][$m],'|')+1));
  35. }else{
  36. //最后一个数据,减去前面的数据
  37. $arr[$v][$m] = substr($n,0,strpos($n,'|')).'|'.(($lastPrice - $arr_price));
  38. }
  39. }
  40. }
  41. }
  42. //[应减去的金额] [原数组] [活动的序号]
  43. $this->group($arr,$apiData,$acticeId);
  44. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注