【问题标题】:PHP - recursive problem [duplicate]PHP - 递归问题[重复]
【发布时间】:2011-11-21 12:18:42
【问题描述】:

可能重复:
PHP 2D Array output all combinations

我需要使用大量可能的输入来测试某个函数的行为。假设函数签名如下:

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
...

请注意,函数参数的数量是未知的,它们的可能值也是未知的。

【问题讨论】:

  • 这与递归无关。如果您想要的只是可能的参数列表的组合,请搜索“排列”。
  • “请注意,函数参数的数量是未知的,它们的可能值也是未知的。” - 不,您似乎明确列出了三个可能的参数,其中两个是可选,所有这些都有两个可能的值。对我来说似乎不是很陌生。
  • @glowcoder 是的,通过func_num_args()func_get_arg() 或只是func_get_args()
  • 你有递归问题,你说?你应该看看这个问题:stackoverflow.com/questions/7492846/php-recursive-problem

标签: php algorithm recursion


【解决方案1】:

这个问题好像和递归没什么关系。

从您所写的内容来看,您似乎想使用从每个参数的可能排列生成的参数列表来测试函数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
}

这是你所追求的吗?

【讨论】:

  • 我需要为很多功能这样做。参数的数量及其有效值都会有所不同。我可以指定参数及其值,但我不想使用嵌套循环来处理每个函数。相反,我想要一个函数来处理任何可能数量的参数及其可能的值。
  • 您正在测试的每个函数调用的预期输出或副作用如何?对于单元测试代码(这似乎是),您可能不得不接受它往往非常冗长。
  • 可以设计一个运行测试的模式,根据该模式定义输入集和结果矩阵,并实现代码来运行所述模式。但是,随着您在测试工具中添加的每一层抽象,您都有引入错误的风险......如果测试工具坏了,您怎么知道?
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多