php - 如何在条件之后返回一个值

标签 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 个范围(specified_time_cost_1、specified_time_cost_2、specified_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 位于 special_time_cost_2 中。

但返回时在外面;

"",120.00,""(第一个空值,然后正确值,再次空值)

如何才能只返回正确的值?

最佳答案

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

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 查询,您也可以找到匹配的时间范围。

关于php - 如何在条件之后返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118988/

相关文章:

php - 为什么MySql多次查询会导致语法错误,而单独查询却可以成功?

mysql - 批处理文件和MySQL : pass a block of commands instead of another . bat文件

php - 具有限制属性的 woocommerce 产品短代码不起作用

php - PHP 中的简单命名空间

php - 有没有办法用表格上传 youtube 视频?

asp.net - 如何以中等信任模式运行 MySQL?

mysql - 为什么这会使服务器超时?

php - 为什么 MySQL BIT_OR() 返回的值与 PHP 按位运算不同

php - 查询mySQL以检查用户是否已存在于两个表中

php - 在 PHP 中更新时如何显示进度消息?