如何在工作价格计算中转换此PHP数组?

如何在工作价格计算中转换此PHP数组?,php,arrays,sum,Php,Arrays,Sum,棘手的部分来了 在rent应用程序中,我有如下数组(当然,数组大小和值可能会有所不同): 键是租金天数,值是用户为特定产品租用的物品的# 天都是连续的(我还将相邻的天分组为) 连续5天被视为“工作周”,特殊价格适用:假设D是每日价格,W是每周价格 如您所见,在本例中,共有5项是日期范围内的租金: 项目1为期一周和两个休息日(15-16-17-18-19-20-21) 回音总价:1*W+2*D 1周和1个休息日(15-16-17-18-19-20)的项目2 回音总价:1*W+1*D 第3项为期3个

棘手的部分来了
在rent应用程序中,我有如下数组(当然,数组大小和值可能会有所不同):

键是租金天数,值是用户为特定产品租用的物品的#

天都是连续的(我还将相邻的天分组为)

连续5天被视为“工作周”,特殊价格适用:假设D是每日价格,W是每周价格

如您所见,在本例中,共有5项是日期范围内的租金:

  • 项目1为期一周和两个休息日(15-16-17-18-19-20-21)
    回音总价:1*W+2*D
  • 1周和1个休息日(15-16-17-18-19-20)的项目2
    回音总价:1*W+1*D
  • 第3项为期3个工作日(17-18-19)
    回音总价:0*W+3*D
  • 第4项:两个休息日(17-19)
    回音总价:0*W+2*D
  • 第5项为期1天(17)
    回音总价:0*W+1*D
  • 。。。并将以上所有内容相加

    好的,到目前为止还不错:我可以用语言表达这个概念

    但是。。。如何将其翻译成脚本?对我来说真的很难

    非常感谢

    编辑:为了澄清,每个数组项的值表示用户特定产品租金的项数;假设产品是“X牌真空吸尘器”,商店存货中有10件物品;清洁公司“Your Clean House inc.”大赚了一笔,在这种情况下,它将租赁:

    • 2013年7月15日,2台“X牌真空吸尘器”
    • 2013年7月16日2台“X牌真空吸尘器”
    • 2013年7月17日5“X牌真空吸尘器”
    • 等等
    Oozel的回答有道理!为了使用我的示例,我只需稍微修改他的脚本,如下所示:

    foreach ($dates as $items){
        for ($i=1; $i<=$items; $i++){
            ... 
        }
    }
    
    foreach($dates作为$items){
    
    对于($i=1;$i我不完全理解$date数组的结构,但我认为它应该是一个多维数组,如下所示,以根据您的需要计算总价

    $dates['2013-07-15'] = array('item2', 'item1');
    $dates['2013-07-16'] = array('item2', 'item1');
    $dates['2013-07-17'] = array('item5', 'item4', 'item3', 'item2', 'item1');
    $dates['2013-07-18'] = array('item3', 'item2', 'item1');
    $dates['2013-07-19'] = array('item4', 'item3', 'item2', 'item1');
    $dates['2013-07-20'] = array('item2', 'item1');
    $dates['2013-07-21'] = array('item1');
    
    然后计算每个项目的租金天数,并计算有多少W和D

    $rent_days = array();
    foreach($dates as $date => $items) {
      foreach($items as $item) {
        if(!isset($rent_days[$item]))
          $rent_days[$item] = 1;
        else $rent_days[$item]++;
      }
    }
    
    $w = 10.5; // as an example
    $d = 2.3;
    
    foreach($rent_days as $item => $n) {
      $w_num = floor($n/5); // number of weeks (namely, 5 consecutive days)
      $d_num = $n % 5; // number of days
      printf('Total price for %s: %.2f<br/>', $item, $w_num*$w + $d_num*$d);
    }
    

    我不明白这个计算。你能澄清一下吗?我特别不明白列表中的解释。第2项的日期是16日,但你要向他收取15日至20日的费用。第3项,你的数组中有数字5,但你只想收取3天的费用。第4项的日期是18日,但你正在登录3天(从17日到19日)只收2美元的费用……我开始明白为什么你会发现为这编写代码如此困难。
    $dates['2013-07-15'] = array('item2', 'item1');
    $dates['2013-07-16'] = array('item2', 'item1');
    $dates['2013-07-17'] = array('item5', 'item4', 'item3', 'item2', 'item1');
    $dates['2013-07-18'] = array('item3', 'item2', 'item1');
    $dates['2013-07-19'] = array('item4', 'item3', 'item2', 'item1');
    $dates['2013-07-20'] = array('item2', 'item1');
    $dates['2013-07-21'] = array('item1');
    
    $rent_days = array();
    foreach($dates as $date => $items) {
      foreach($items as $item) {
        if(!isset($rent_days[$item]))
          $rent_days[$item] = 1;
        else $rent_days[$item]++;
      }
    }
    
    $w = 10.5; // as an example
    $d = 2.3;
    
    foreach($rent_days as $item => $n) {
      $w_num = floor($n/5); // number of weeks (namely, 5 consecutive days)
      $d_num = $n % 5; // number of days
      printf('Total price for %s: %.2f<br/>', $item, $w_num*$w + $d_num*$d);
    }
    
    /*
    Total price for item2: 12.80
    Total price for item1: 15.10
    Total price for item5: 2.30
    Total price for item4: 4.60
    Total price for item3: 6.90
    */