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

饭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
...全文
383 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧