2013-08-21 60 views
0

我得到了7如果其他语句,我可以知道我可以将它编译成一个函数文件吗?所以我只是触发这个函数而不是一个长而乱的代码。下面php多个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; 
} 
?> 
+0

不要依赖register_globals;使用$ _POST superglobal而不是 –

+0

那么Excel IF测试__> = 7__,而您的PHP如果测试__> 7__,所以公式转换并不完全正确 –

+0

我假设您的意思是$ r2a,因为您没有做任何改变$ r1a –

回答

0

我不认为你需要的是如果的。 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,并保持剩余部分,因为它是(要clearify,如果输入到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); 
+0

此功能包含一个0,我只需要从1到7的值。 – Jeff

+0

立即尝试。如果'rowone'是3,那么值就变成3456712 – atomman

+0

hi @atomman,经过测试,代码完美无瑕,因为我知道inc表示函数名称,怎么回到$ a?和这个代码'($ a%7)+ 1'的头脑解释升技,所以我知道它是如何工作的,并将其作为一个教训。再次感谢 – Jeff

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 
} 
+0

我宁愿看到你把这些值放到一个数组中,而不是用这种方式来扰乱变量。 – atomman

+0

哦差的变数! :)我只是试图缩短代码,不改变它的影响,因为我不知道接下来会发生什么 – Nabab

+0

如果你使用数组,实际上会更短。 '$ v = $ _POST ['rowone']; $ arr = array($ v); ($ i = 1; $ i <7; $ i ++){ array_push($ arr,($ v + $ i)%7); }' – atomman