2011-05-14 34 views
1

情況如下:有一個連續循環,用於更新某些值。然後腳本檢查某些條件。 (簡體)代碼:PHP:如何更改「if」 - 動態順序

<?php 
set_time_limit(0); 
// etc 
while(1==1) 
{ 
    $a = getFromDatabase('a'); // function to get value of A 
    $b = getFromDatabase('b'); // function to get value of B 
    $c = getFromDatabase('c'); // function to get value of C 
    $d = getFromDatabase('d'); // function to get value of D 

    if($a >= 12 && time() <= $b && ($d === false || $d <= time())) 
    { 
     include 'pages/'.$a.'.php'; 
    } 
    if($b <= 3 && time() >= $d && ($c === false || $c <= time())) 
    { 
     include 'pages/'.$b.'.php'; 
    } 
} 

我的問題是:如何動態地更改這些IF語句的順序?

$order = array('b','a'); // first b then a 

重要:如果條件真的動態。因此,有沒有真正的模式(上面的例子被簡化,所以不能充分條件)

+1

什麼?你究竟在做什麼? – 2011-05-14 14:14:53

+0

爲什麼要這樣做?你能提供更多關於你在做什麼的信息嗎?就目前而言,您的代碼非常可怕。 – Brad 2011-05-14 14:15:02

+0

我想你只需要更多的IFs,如果你試圖達到你想要的:D – user489872 2011-05-14 14:16:12

回答

2

把它們的功能,然後只存儲函數的名稱,並依次通過每個函數。

function func1($a, $b, $c, $d) 
{ 
    if (...) 
    { 
    return $a 
    } 
    return false; 
} 

function func2($a, $b, $c, $d) 
... 

$funcs = Array('func1', 'func2'); 

... 

foreach($funcs as $func) 
{ 
    if ($page = $func($a, $b, $c, $d)) 
    { 
    include "pages/$page.php" 
    } 
} 
1

不知道這是你想要的,但你可以把if函數:

<?php 
set_time_limit(0); 
function a($a,$b,$c,$d){ 
     if($a >= 12 && time() <= $b && ($d === false || $d <= time())) 
     { 
      include 'pages/'.$a.'.php'; 
     } 
} 
function b($a,$b,$c,$d){ 
     if($b <= 3 && time() >= $d && ($c === false || $c <= time())) 
     { 
      include 'pages/'.$b.'.php'; 
     } 
} 

// etc 
while(1==1) 
{ 
    $a = getFromDatabase('a'); // function to get value of A 
    $b = getFromDatabase('b'); // function to get value of B 
    $c = getFromDatabase('c'); // function to get value of C 
    $d = getFromDatabase('d'); // function to get value of D 
    $order = array('b','a'); // first b then a 
    foreach($order as $fun) 
     call_user_func_array($fun, array($a,$b,$c,$d)) 
}