在PHP中使用if语句中的for循环

在PHP中使用if语句中的for循环,php,for-loop,if-statement,Php,For Loop,If Statement,我正在写一个排班应用程序。此声明检查通过预订额外班次,用户是否违反了他们连续预订超过7个夜班的规则。这段代码运行良好,但我正试图找到一种更优雅的方式来编写它,例如在if语句中使用for循环。此代码段存在于更大的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

我正在写一个排班应用程序。此声明检查通过预订额外班次,用户是否违反了他们连续预订超过7个夜班的规则。这段代码运行良好,但我正试图找到一种更优雅的方式来编写它,例如在if语句中使用for循环。此代码段存在于更大的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变量由一个循环填充,该循环在变量名称末尾向前或向后查看指定的天数,并根据是否为夜班返回该天数的true或false数组。

假设所有这些数组只能包含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
  }
}

作为构建多个阵列和复杂比较的替代方案,此替代方案仅使用两个阵列,一个是前几天的,另一个是前瞻性的。我不能100%确定这是否包括他们试图预订的那一天,但希望这个想法很容易适应你的需要

基本概念是通过$p_lookback_night list向后看,并计算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。

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