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

时间:2013-08-21 16:11:07

标签: php if-statement

我得到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;
}
?>

2 个答案:

答案 0 :(得分:0)

我认为你根本不需要if。 Modulo操作应该为您解决。

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);

答案 1 :(得分:0)

如果我理解你想要实现的目标,那么这应该有效:

$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
}