请教一个算法问题,谢谢~

饭2112 2012-12-13 02:37:59
N个数组有M个元素,每个数组必须取一个元素,怎么把他们的全部可能都显示出来
(不知道有没有描述清楚,有点像遍历)

例如
数组1(1,2,3,4,5)
数组2 (11,22,33)
数组3 (111,222,333,444,555,666)

显示
1,11,111
1,11,222
2,11,111
…………
5,33,666
...全文
345 点赞 收藏 14
写回复
14 条回复
饭2112 2012年12月18日
引用 12 楼 shine_php100 的回复:
PHP code?12345678910111213141516171819202122232425262728293031323334353637383940414243class Combination { var $inputList = array(); var $outputList = array(); public fu……
十分感谢~
回复 点赞
Z19801029 2012年12月15日
P WH FHW NARF
回复 点赞
shine_php100 2012年12月15日

class Combination {
	
	var $inputList = array();
	var $outputList = array();
	
	public function addArr($arr=array()) {
		if (empty($arr) || !is_array($arr)) return false;
		array_push($this->inputList, $arr);	
	} 
	public function showComninatList(){
		if (!empty($this->inputList)) {
			if (count($this->inputList) == 1)
				return $this->inputList;
			foreach ($this->inputList[0] as $key => $value) 
				$this->outputList = array_merge($this->outputList, $this->recursion(1, $value));
		}
	}
	private function recursion($beforkey, $beforVal){
		if (isset($this->inputList[$beforkey])) {
			$tempArr = array();
			if (!isset($this->inputList[$beforkey+1])) {
				foreach ($this->inputList[$beforkey] as $_indexVal)
					$tempArr[] = $beforVal.','.$_indexVal;
				return 	$tempArr;
			}else {
				foreach ($this->inputList[$beforkey] as $value) {
					foreach ($this->recursion($beforkey+1, $value) as $hasVal) 
						$tempArr[] = $beforVal.','.$hasVal;
				}
				return 	$tempArr;
			}
		} 
	}
}
$a = array('a1','a2','a3');
$b = array('b1','b2','b3');
$c = array('c1','c2','c3');
$com = new Combination();
$com->addArr($a);
$com->addArr($b);
$com->addArr($c);
$com->showComninatList();
print_r($com->outputList);
回复 点赞
xuzuning 2012年12月14日
噢,你是想整体传入? function foo() { $ar = func_get_args(); if(func_num_args() == 1) return call_user_func_array('foo', $ar);//加上这句 $t = array_shift($ar); if(count($ar) > 1) { $p = call_user_func_array('foo', $ar);
回复 点赞
饭2112 2012年12月14日
引用 6 楼 xuzuning 的回复:
引用 4 楼 fanhefan 的回复:调用foo($a, $b, $c) 我不知道数组的数量怎么传值进去? 就这样啊 foo($a, $b, $c) 有多少就放多少 这个函数是被设计成不定参数的 foo($a, $b) foo($a, $b, $c) foo($a, $b, $c, $d) 都可以
十分感谢 我想换成传入一个二维数组 现在在研究你的算法 谢谢
回复 点赞
dhonor 2012年12月14日
数组遍历吧,写个循环
回复 点赞
xuzuning 2012年12月14日
那就不是改函数的问题了 经#8的修改后,那个函数基本已是求“笛卡尔积”的完备函数了 对于你 #9 的数据,应该是在循环里使用它
回复 点赞
饭2112 2012年12月14日
引用 8 楼 xuzuning 的回复:
噢,你是想整体传入? function foo() { $ar = func_get_args(); if(func_num_args() == 1) return call_user_func_array('foo', $ar);//加上这句 $t = array_shift($ar); if(count($ar) > 1) { ……
再麻烦一下 如果我要传入这些数据 $e[] = array(gid =>11,baozhuang => array(2,3,4,5)); $e[] = array(gid =>11,baozhuang => array(11,22,33)); $e[] = array(gid =>11,baozhuang => array(111,222,333,444,555,666)); print_R(foo($e)); foo函数应该怎么改 谢谢
回复 点赞
xuzuning 2012年12月13日
引用 4 楼 fanhefan 的回复:
调用foo($a, $b, $c) 我不知道数组的数量怎么传值进去?
就这样啊 foo($a, $b, $c) 有多少就放多少 这个函数是被设计成不定参数的 foo($a, $b) foo($a, $b, $c) foo($a, $b, $c, $d) 都可以
回复 点赞
yyszh 2012年12月13日
用一个二维数组就成。
回复 点赞
饭2112 2012年12月13日
引用 3 楼 xuzuning 的回复:
那就写个函数好了PHP code?123456789101112131415161718192021$a = array(1,2,3,4,5);$b = array(11,22,33);$c = array(111,222,333,444,555,666); print_r(foo($a, $b, $c)); function foo() { $ar = func_ge……
还想问一个问题 调用foo($a, $b, $c) 我不知道数组的数量怎么传值进去?
回复 点赞
xuzuning 2012年12月13日
那就写个函数好了
$a = array(1,2,3,4,5);
$b = array(11,22,33);
$c = array(111,222,333,444,555,666);

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

function foo() {
  $ar = func_get_args();
  $t = array_shift($ar);
  if(count($ar) > 1) {
    $p = call_user_func_array('foo', $ar);
  }else $p = current($ar);
  foreach($t as $a) {
    foreach($p as $b) {
     if(! is_array($a)) $a = array($a);
     if(! is_array($b)) $b = array($b);
     $r[] = array_merge($a, $b);
    }
  }
  return $r;
}
Array ( [0] => Array ( [0] => 1 [1] => 11 [2] => 111 ) [1] => Array ( [0] => 1 [1] => 11 [2] => 222 ) [2] => Array ( [0] => 1 [1] => 11 [2] => 333 ) [3] => Array ( [0] => 1 [1] => 11 [2] => 444 )
回复 点赞
饭2112 2012年12月13日
引用 1 楼 xuzuning 的回复:
PHP code?1234567891011$a = array(1,2,3,4,5);$b = array(11,22,33);$c = array(111,222,333,444,555,666); foreach($a as $a1) { foreach($b as $b1) { foreach($c as $c1) { echo "$a1,$b1……
你好,数组数量是未知的呢 不一定是3个 3个只是一个小小的例子
回复 点赞
xuzuning 2012年12月13日
$a = array(1,2,3,4,5);
$b = array(11,22,33);
$c = array(111,222,333,444,555,666);

foreach($a as $a1) {
  foreach($b as $b1) {
    foreach($c as $c1) {
      echo "$a1,$b1,$c1<br>";
    }
  }
}
1,11,111 1,11,222 1,11,333 1,11,444 1,11,555 1,11,666 1,22,111 1,22,222 1,22,333 .... 5,33,333 5,33,444 5,33,555 5,33,666
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9734

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告