2013-08-21 100 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