仅当值相同时,才会在foreach循环内汇总值

时间:2014-07-07 11:56:50

标签: php html

我必须检查条件,即用户不应在时间表中输入超过24小时/每天。例如。 (yyyy-mm-dd)2014-12-21 | 5小时,2014-12-21 | 10小时,2014-12-21 | 10小时然后点击提交按钮,我需要总结同一天的小时,并提醒用户说"不应每天输入超过24小时"。

这是我的代码。

<html>
 <head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>  
 </head>
 <body>
  <form name="" action="#" method="post">

   <?php for ($i=0; $i<5; $i++){ ?>
   <label>date</label>
   <input class="datefield" id="datefiled_<?php echo $i; ?>" type="date" name="datevalue[]" value="" / >
   <label>hrs</label>
   <input class="hrscheck" id="hrscheck_<?php echo $i; ?>" type="number" value="" name="hrs[]" />
   <br />

   <?php } ?>

   <input type="submit" name="submit" value="save">
  </form>

  <?php

  if(isset($_POST['submit']))
  {
    $datevalue = $_POST['datevalue'];
    $prevDate = '';

   $hrs=0;

    foreach($datevalue as $key=>$values)
    {

         echo $curDate = ($values);
         echo "=>";
         echo $hrs = $_POST['hrs'][$key];
         echo "<br>";

       if ($curDate == $prevDate) {      
         echo $hrs +=$hrs;
       }       
        $prevDate = $curDate;
    }
  }

  ?>


 </body>
</html>

输出

2014-12-25=>10
2014-12-25=>10
2014-12-25=>10

2014-12-26=>5
2014-12-26=>13

我必须总结2014-12-25三小时值(10 + 10 + 10)= 30并提醒用户(不应超过24小时)

1 个答案:

答案 0 :(得分:3)

您可以构建摘要数组,然后过滤当天报告的超过30小时的数组:

// build summary array: [date] => array of time values
$summary = [];
foreach($datevalue as $key=>$values) {
     $summary[$values][] = $_POST['hrs'][$key];
}
// filter them
if (array_filter($summary, function($item) {
    return array_sum($item) > 24;
})) {
    echo "UH OH, a day doesn't have more than 24 hours";
}