2011-09-20 203 views
0

可能重複:
PHP 2D Array output all combinationsPHP - 遞歸問題

我需要的可能輸入的顯著數來測試某些功能的行爲。說函數簽名如下:

foo ($a) 
foo ($a, $b, $c) 

$a說可具有下列值:1,2。

$b說可以具有以下值:'hello''world'

$c可以有以下值:TRUEFALSE

如何編寫返回以下組合功能:

1 
2 
1,hello,TRUE 
1,hello,FALSE 
2,hello,TRUE 
2,hello,FALSE 
1,world,TRUE 
1,world,FALSE 
... 

注意的函數的參數的數量是未知的,所以他們的可能的值。

+0

你的問題是什麼? – hakre

+2

這與遞歸無關。搜索「排列」,如果你想要的只是你可能參數列表的組合。 – mario

+2

*「請注意,函數參數的數量是未知的,它們的可能值也是未知的。」* - 不,您似乎已經明確列出了三個可能的參數,其中兩個參數是可選的,所有這些參數都有兩個可能的值。對我而言,這似乎不是很陌生。 – animuson

回答

0

這個問題似乎與遞歸沒有任何關係。

從你寫的東西看來,你想用這個參數列表來測試函數foo(),這個參數列表是從每個可能的排列中產生的? 以下代碼將生成該列表。

//Generate the list 
$arg_list = array(); 
foreach(array(1,2) as $a) //Build the foo($a) cases 
    $arg_list[] = array($a); 
foreach(array(1,2) as $a) //Build the foo($a, $b, $c) cases 
    foreach(array('hello','world') as $b) 
     foreach(array(true,false) as $c) 
      $arg_list[] = array($a,$b,$c); 

//Test each possible case 
foreach($arg_list as $args) { 
    ... 
    $result = call_user_func_array('foo', $args); 
    ... 
    //Is result what was expected? Check and aggregate 
} 

這是你之後的事情嗎?

+0

我需要做很多功能。參數的數量和它們的有效值都會有所不同。我可以指定參數和它們的值,但我不想有嵌套循環來處理每個函數。相反,我想要一個函數來處理任何可能數量的參數及其可能的值。 – StackOverflowNewbie

+0

您正在測試的每個函數調用的期望輸出或副作用如何?對於單元測試代碼(這似乎是),您可能不得不接受它往往是相當冗長的。 – MrTrick

+0

您可以*設計運行測試的模式,根據該模式定義輸入集合和結果矩陣,並實現運行所述模式的代碼。但是,如果您在測試工具中添加了每個抽象層,那麼您可能會冒險引入錯誤......並且如果測試工具損壞,您會如何知道? – MrTrick