php multiple-if-else语句如何组合成一个函数


php multiple if else statement how to combine into one function?

我得到了7 if else语句,我可以知道如何将它编译成一个函数文件吗?所以我只是触发了这个函数——一个又长又乱的代码。

以下是我的代码:

<?php
$r1a = $_POST['rowone'];
if ($r1a<7) {
    $r2a=$r1a+1;
    } else {
    $r2a=$r1a+1-7;
}
if ($r2a<7) {
    $r3a=$r2a+1;
    } else {
    $r3a=$r2a+1-7;
}
if ($r3a<7) {
    $r4a=$r3a+1;
    } else {
    $r4a=$r3a+1-7;
}
if ($r4a<7) {
    $r5a=$r4a+1;
    } else {
    $r5a=$r4a+1-7;
}
if ($r5a<7) {
    $r6a=$r5a+1;
    } else {
    $r6a=$r5a+1-7;
}
if ($r6a<7) {
    $r7a=$r6a+1;
    } else {
    $r7a=$r6a+1-7;
}
?>

我遇到的第二个问题是把所有的加在一起,有7个垂直行有3个值,还有5个行有2个值要加。我在这里找到了我的代码,如果总值为12,它将显示0,因为我的代码是-12。如果值为12,结果将+1-12,有人想修改代码吗?谢谢

<?php
$r4a = $r1a+$r2a+$r3a;
if ($r4a<12) {
    $r4a=$r4a;
        } else {
    $r4a=$r4a-12;
}
$r4b = $r1b+$r2b+$r3b;
if ($r4b<12) {
    $r4b=$r4b;
        } else {
    $r4b=$r4b-12;
}
$r4c = $r1c+$r2c+$r3c;
if ($r4c<12) {
    $r4c=$r4c;
        } else {
    $r4c=$r4c-12;
}
$r4d = $r1d+$r2d+$r3d;
if ($r4d<12) {
    $r4d=$r4d;
        } else {
    $r4d=$r4d-12;
}
$r4e = $r1e+$r2e+$r3e;
if ($r4e<12) {
    $r4e=$r4e;
        } else {
    $r4e=$r4e-12;
}
$r4f = $r1f+$r2f+$r3f;
if ($r4f<12) {
    $r4f=$r4f;
       } else {
    $r4f=$r4f-12;
}
$r4g = $r1g+$r2g+$r3g;
if ($r4g<12) {
    $r4g=$r4g;
        } else {
    $r4g=$r4g-12;
}
$r4h = $r2h+$r3h;
if ($r4h<12) {
    $r4h=$r4h;
        } else {
    $r4h=$r4h-12;
}
$r4i = $r2i+$r3i;
if ($r4i<12) {
    $r4i=$r4i;
        } else {
    $r4i=$r4i-12;
}
$r4j = $r2j+$r3j;
if ($r4j<12) {
    $r4j=$r4j;
        } else {
    $r4j=$r4j-12;
}
$r4k = $r2k+$r3k;
if ($r4k<12) {
    $r4k=$r4k;
        } else {
    $r4k=$r4k-12;
}
$r4l = $r2l+$r3l;
if ($r4l<12) {
    $r4l=$r4l;
        } else {
    $r4l=$r4l-12;
}
?>

我认为您根本不需要if。模运算应该为您解决这个问题。

function inc($a) {
    return ($a % 7)+1;
}
$r1a = $_POST['rowone'];
$r2a = inc($r1a);
$r3a = inc($r2a);
$r4a = inc($r3a);
$r5a = inc($r4a);
$r6a = inc($r5a);
$r7a = inc($r6a);

代码还没有经过测试,但您可以大致了解。

另一种选择:

$v = $_POST['rowone'];
$arr = array(1, 2, 3, 4, 5, 6, 7);
$b = array_slice($arr, 0, $v-1);
$arr = array_slice($arr, $v-1);
$arr = array_merge($arr, $b);
print_r($arr);

回答你的第二个问题,我只把0变成了1,其余的保持原样(为了澄清,如果mod12的输入,例如$r1a+$r2a+$r3a是12的倍数,它会返回1,在其他情况下,它会回到标准的modulo 12,例如13会变成1):

function mod12($a) {
    $m = $a % 12;
    if ($m == 0) {
        return 1;
    }else {
        return $m;
    }
}
$r4a = mod12($r1a+$r2a+$r3a);
$r4b = mod12($r1b+$r2b+$r3b);
$r4c = mod12($r1c+$r2c+$r3c);
$r4d = mod12($r1d+$r2d+$r3d);
$r4e = mod12($r1e+$r2e+$r3e);
$r4f = mod12($r1f+$r2f+$r3f);
$r4g = mod12($r1g+$r2g+$r3g);
$r4h = mod12($r2h+$r3h);
$r4i = mod12($r2i+$r3i);
$r4j = mod12($r2j+$r3j);
$r4k = mod12($r2k+$r3k);
$r4l = mod12($r2l+$r3l);

如果我很清楚你试图实现的目标,这应该会奏效:

$r1a = $_POST['rowone'];
for ( $i = 1; $i < 7; $i++ ){
  $cur = 'r'.$i.'a';
  $next = 'r'.($i+1).'a';
  $$next = $$cur < 7 ? $$cur+1 : $$cur+1-7
}