【问题标题】:Using for loop within if statement in PHP在 PHP 中的 if 语句中使用 for 循环
【发布时间】:2018-05-31 07:30:22
【问题描述】:

我正在编写一个排班应用程序。此声明检查通过预订额外班次,用户不会违反他们连续预订超过 7 个夜班的规则。这段代码运行良好,但我试图找到一种更优雅的方式来编写它,例如在 if 语句中使用 for 循环。这个 sn-p 存在于一个更大的 while 循环中。

if (
    $original_shift->night_shift==true &&
    $p_lookback_night_7===[1,1,1,1,1,1,1] || $p_lookforward_night_7===[1,1,1,1,1,1,1] ||
    ($p_lookback_night_1===[1] && $p_lookforward_night_6===[1,1,1,1,1,1]) ||
    ($p_lookback_night_2===[1,1] && $p_lookforward_night_5===[1,1,1,1,1]) ||
    ($p_lookback_night_3===[1,1,1] && $p_lookforward_night_4===[1,1,1,1]) ||
    ($p_lookback_night_4===[1,1,1,1] && $p_lookforward_night_3===[1,1,1]) ||
    ($p_lookback_night_5===[1,1,1,1,1] && $p_lookforward_night_2===[1,1]) ||
    ($p_lookback_night_6===[1,1,1,1,1,1] && $p_lookforward_night_1===[1])
) {
    return 'You can\'t do more than 7 night shifts in a row'; 
    break;
}

$p_look 变量由一个循环填充,该循环在变量名称末尾向后或向前查看指定天数,并返回该天数的真或假数组,具体取决于这些天数是否为夜班与否。

【问题讨论】:

  • 如何填充所有 $p_lookback_night_7(和 $p_lookforward_night_7)变量?

标签: php for-loop if-statement


【解决方案1】:

作为构建多个数组和复杂比较的替代方案,此替代方案仅使用 2 个数组,一个用于前几天,一个用于未来。我不能 100% 确定这是否包括他们试图预订的那一天,但希望这个想法很容易适应您的需求。

基本概念是向后查看$p_lookback_night 列表并计算1,当它到达0 时停止。然后通过$p_lookforward_night 列表执行类似的操作。最终结果是连续 1 的数量...

$p_lookback_night = [0,0,0,0,1,1];
$p_lookforward_night = [1,1,1,1,0,0];
$run = 0;
foreach (array_reverse($p_lookback_night) as $test )  {
    if ( $test == 1 )    {
        $run++;
    }
    else    {
        break;
    }
}

foreach ($p_lookforward_night as $test )  {
    if ( $test == 1 )    {
        $run++;
    }
    else    {
        break;
    }
}

echo $run;

使用测试数据它给出 6,因此您可以使用它来决定他们是否尝试连续预订 7 个。

【讨论】:

    【解决方案2】:

    假设所有这些数组在这种情况下只能包含 1,您可以简单地计算值

    && count($p_lookback_night_7)===7 || ...
    

    也许甚至在最后动态地使用 int 但这可能会更麻烦,这是值得的。类似的东西

    for($i=1;$i<8;$i++){
      if(count(${"p_lookback_night_".$i}) == $i && count(${"p_lookforward_night_".$i}) == $i ){
      ..wahtever
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2019-06-09
      相关资源
      最近更新 更多