这是功能描述
test($argv)
$argv
是一个数组,例如$argv=array($from1,$to1,$from2,$to2.....);
数组项必须是偶数。
$argv=array(1,3,4,5)
:这将输出如下值:
1_4
1_5
2_4
2_5
3_4
3_5
伪代码就像
while($from1<=$to1){
while($from2<=$to2){
echo $from1."_".$from2."<br/>";
$from2++;
}
$from1++;
}
$argv=array(1,2,3,4,5,6)
:这将输出如下值:
1_3_5
1_3_6
1_4_5
1_4_6
2_3_5
2_3_6
2_4_5
2_4_6
伪代码就像
while($from1<=$to1){
while($from2<=$to2){
while($from3<=$to3){
echo $from1."_".$from2."_".$from3."<br/>";
$from3++;
}
$from2++;
}
$from1++;
}
数组$ argv的数量不是常数。 可能会输出3或4级循环。
我刚刚听说将使用尾部回归或迭代,但我不确切知道如何编码。
答案 0 :(得分:1)
以下是一些功能:
header("Content-type: text/plain");
function testFromTo($args) {
echo "***** testFromTo *****\n";
// uses indexes parity to walk the array
foreach ($args as $k1=>$v1) {
if (($k1 + 1) % 2 == 1) {
foreach ($args as $k2=>$v2) {
if (($k2 + 1) % 2 == 0) {
echo $v1 . "_" . $v2 . "\n";
}
}
}
}
}
function testHalf($args) {
echo "***** testHalf *****\n";
// cuts $args in two parts
$args1 = array_slice($args, 0, count($args) / 2);
$args2 = array_slice($args, count($args) / 2);
foreach ($args1 as $v1) {
foreach ($args2 as $v2) {
echo $v1 . "_" . $v2 . "\n";
}
}
}
$argv = array(1, 2, 3, 4, 5, 6);
testFromTo($argv);
testHalf($argv);
exit;
?>
及相关产出:
***** testFromTo *****
1_2
1_4
1_6
3_2
3_4
3_6
5_2
5_4
5_6
***** testHalf *****
1_4
1_5
1_6
2_4
2_5
2_6
3_4
3_5
3_6
答案 1 :(得分:1)
以下功能应该做你想要的。它不会打印结果,而是返回一个数组,其中包含可以迭代并打印它的结果。
$testArray = array('1', '3', '4', '5');
$testArray2 = array('1', '2', '3', '4', '5', '6');
function test($a) {
$from1 = array_shift($a);
$to1 = array_shift($a);
$result = array();
while ($from1 <= $to1) {
if (sizeof($a) > 0) {
$rest = test($a);
foreach ($rest as $b) {
$result[] = $from1.'_'.$b;
}
} else {
$result[] = $from1;
}
$from1++;
}
return $result;
}
print_r(test($testArray));
print_r(test($testArray2));
作为一个建议阅读递归,因为它是一个非常有用的技术。有时很难将它包裹起来,但这是非常值得的。如果我没记错的话,来自麻省理工学院的This book有一个关于递归的伟大章节,它是免费的。玩得开心。
答案 2 :(得分:0)
这样的东西?
test("1", "2", "4", "5", "6", "7", "8", "9");
function test(){
$args = func_get_args();
$cnt = func_num_args();
//echo "cnt :: " . ($cnt % 2) . "\n";
if(($cnt % 2) > 0) return false;
$split = $cnt / 2;
list($list1, $list2) = array_chunk($args, ($cnt / 2));
foreach($list1 as $idx=>$val){
foreach($list2 as $idx2=>$val2){
echo $list1[$idx] . "_" . $list2[$idx] . "\n";
}
}
}
这是输出:
1_6
1_6
1_6
1_6
2_7
2_7
2_7
2_7
4_8
4_8
4_8
4_8
5_9
5_9
5_9
5_9