如何在条件后返回一个值

时间:2017-11-05 06:51:00

标签: php mysql

我有一个php函数。检查当前时间是在哪个字段中。然后它会检索该范围的成本。

字段结构:从(时间)到(时间) - 成本

+---------------------+---------+--------------------------+-------------------------+-----------------------+
| id_delivery_week    | weekday |specific_time_cost_1     | specific_time_cost_2     | specific_time_cost_3   |
+---------------------+---------+-------------------------+-------------------------+--------------------------+
|                   1 | Sunday | 00:00:00-10:00:00-130.00 | 10:00:00-18:00:00-120.00 | 18:00:00-24:59:00-150.0

下面是我检查当前时间成本的功能。

修改

//user can pick day from drop down.picked day will receive in to `getData()` 
    protected function getData(){
          if(isset($_GET['day']) && !empty($_GET['day'])){ 
            $day=$_GET['day'];
            $now = new DateTime();
            $Date = $now->format('Y-m-d');
            $time = $now->format('H:i:s');
            $this->checkCostRanges($day,$time);
          }
        }



protected function checkCostRanges($day,$time){

    $ranges=$this->getCostRanges($day); //mysql select query

    foreach ($ranges as $range) {
    if ((!empty($range['specific_time_cost_1']))){
      $shipping_cost=$this->calRange($range['specific_time_cost_1'],$time);

    }
    if ((!empty($range['specific_time_cost_2']))){
      $shipping_cost=$this->calRange($range['specific_time_cost_2'],$time);

    }
    if ((!empty($range['specific_time_cost_3']))){
      $shipping_cost=$this->calRange($range['specific_time_cost_3'],$time);

    }
  }
}

$ time: - 这是当前时间(例如:12:08:53)

$ range: - 所有3个范围(specific_time_cost_1,specific_time_cost_2,specific_time_cost_3)

public function calRange($range,$time){
      $cost_val="";
      $parts = explode("-", $range);
      $from = $parts[0];
      $to = $parts[1];
      $cost = $parts[2];
      $curr_time = is_int($time) ? $date : strtotime($time); // convert non timestamps
      $from_time = is_int($from) ? $from : strtotime($from);
      $to_time = is_int($to) ? $to : strtotime($to);

      if(($curr_time > $from_time) && ($curr_time <= $to_time)){//check current time is in which field
        $cost_val=$cost; //get cost for the field
        error_log("inside if ".$cost_val);
      }
      error_log("outside if ".$cost_val);
      return $cost_val;
    }

if条件内,我可以获得当前时间的正确成本。根据示例时间,我可以获得120.00。因为12:08:53位于specific_time_cost_2

但是如果返回就在外面;

&#34; &#34;,120.00,&#34; &#34; (第一个空值,然后是正确值,再次为空值)

我怎样才能返回正确的值?

1 个答案:

答案 0 :(得分:0)

您正在覆盖结果。例如,如果您与第一个时间范围匹配,则仍处理第二个时间范围,然后清除以前的结果。所以做这样的事情:

for ($i = 1; $i <= 3; $i++) {
  if (!empty($range["specific_time_cost_$i"])){
    $shipping_cost = $this->calRange($range["specific_time_cost_$i"],$time);
    if ($shipping_cost !== "") break;
  }
}

但请注意,您使用的是设计糟糕的数据库。您应该将范围存储在一个单独的表中,在该表中您将拥有对主表的外键引用,范围的序列号(例如1,2或3),开始时间,结束时间和成本,所有作为单独的字段。这将使处理更容易(!),因为它允许您查找匹配的时间范围,即使使用简单的SQL查询。