$a=array ( '黑色','白色' );
$b=array ( '36码' ,'37码' );
$c=array ( '男款' ,'女款' );
$d = array();
foreach ($a as $i => $_a ){
foreach ($b as $ii => $_b ){
foreach ($c as $iii => $_c ){
$d[] = $_a.$_b.$_c;
}
}
}
print_r($d);
Array
(
[0] => 黑色36码男款
[1] => 黑色36码女款
[2] => 黑色37码男款
[3] => 黑色37码女款
[4] => 白色36码男款
[5] => 白色36码女款
[6] => 白色37码男款
[7] => 白色37码女款
)
‘贰’ 用php完成排列组合问题
functionnumOfChoice($m,$n){
returnpow($m)/pow($n)/pow($m-$n);
}
functionpow($n){
$x=1;
for($i=2;$i<=n;$i++)$x*=$i;
return$x;
}
‘叁’ 怎么用PHP代码做出数字1到10的所有组合方式
你的思路是 先随机得到一个1-100的i
然后截取判断,再在判断里循环?
先改思路,在不考虑效率的情况下,先循环
$arr=Array();
while(count($arr)<10){
$temp=rand(1,100);
//判断末尾数字
//判断是否数组中存在,不存在就$arr[]=$temp;存在就continue;
}
如果考虑效率,则修改算法,1-100就是两位数,随机生成十位数,末位再随机生成3和8比较好
‘肆’ 求个PHP数组历遍组合的算法
哥们,跟你个思路,你要学会使用PHP强大的数组处理能力。
思路很简单:把数组全部合并后,用PHP自带的array_unique()把相同元素的值进行移除,你自己试试array_unique()看能不能进行多维数组的元素过滤。
‘伍’ 求PHP 数组的任意组合的算法函数
function getRank($arr, $len=0, $str="") {
global $arr_getrank;
$arr_len = count($arr);
if($len == 0){
$arr_getrank[] = $str;
}else{
for($i=0; $i<$arr_len; $i++){
$tmp = array_shift($arr);
if (empty($str))
{
getRank($arr, $len-1, $tmp);
}
else
{
getRank($arr, $len-1, $str.",".$tmp);
}
// array_push($arr, $tmp);
}
}
}
测试:
$words = array('a1','b2','c3','d4','e5');
$arr_getrank = array();
getRank($words, 3);
print_r($arr_getrank);
输出:
Array
(
[0] => a1,b2,c3
[1] => a1,b2,d4
[2] => a1,b2,e5
[3] => a1,c3,d4
[4] => a1,c3,e5
[5] => a1,d4,e5
[6] => b2,c3,d4
[7] => b2,c3,e5
[8] => b2,d4,e5
[9] => c3,d4,e5
)
‘陆’ 求一个PHP计算数组内元素的不同组合,请看案例
除了a和d之外其它元素任意组合的算法有吗,没有的话可以网络一下,本题目需要的就是除了a和d之外其它元素任意组合,输出的时候每一组前面添加a、后面添加d。
‘柒’ 用php实现排列组合问题
vararr=[];
functionf(l,n,s){
if(n==l||n==0){
for(vari=0;i<l;i++){
s+=n?"1":"0";
}
arr.push(s);
returns;
}else{
f(l-1,n-1,s+"1");
f(l-1,n,s+"0");
}
}
f(4,2,"");
这道题本来是,一个长度为l的二进制数字,其中有n个1,剩下都为0,有多少种组合,放这道题好像可以,最后只要取得arr的长度就行了
varm=4;
varn=2;
vars=0;
functionf(m,n){
if(m==n||n==0){
s++;
returnfalse;
}
f(m-1,n-1);
f(m-1,n);
}
f(m,n);
‘捌’ php 如何做排列组合
原理相当于自己建个树,不停地在末尾里添加上子节点,最后遍历整个树。
代码如下:
<?php
$str='1=12,2=34,3=14,4=23';
$_str=explode(',',$str);
$_str=array_reverse($_str);
$_key=array();
$tree=array();
foreach($_str as $v){
$str=explode('=',$v);
$_key[]=$str[0];
$str=str_split($str[1]);
$_tree=array();
foreach($str as $node){
if(empty($tree)):
$_tree[][]=$node;
else:
foreach($tree as $_node) $_tree[]=str_split(implode($_node).$node);
endif;
}
$tree=$_tree;
}
foreach($tree as $v){
$str=array();
foreach($v as $_k=>$_v) $str[]=$_key[$_k].'='.$_v;
echo implode(',',array_reverse($str)),'<br>';
}
?>
‘玖’ 求一个一维数组内部元素的所有可能的组合的算法用php实现
原理相当的简单,就是依次向盘子里面放abc三种水果,后面一个在前面的一堆方法基础上再依次的放,放一个盘的时候有3种放法,两个盘的时候有3*3种放法,三个盘的时候是3*3*3种放法,所以最后总数是3的5次方,也就是有243个组合。下面的代码就是体现出这种逻辑。
<?php
$fruit=array('a','b','c');
$dishes[]=range(1,5);
for($i=0;$i<5;$i++){
foreach($dishes as $k=>$v){
foreach($fruit as $_fruit){
$v[$i]=$_fruit;
$dishes[]=$v;
}
unset($dishes[$k]);
}
}
$dishes=array_values($dishes);
foreach($dishes as $k=>$v)
echo $k+1,':',implode('',$v),'<br>';
?>
‘拾’ php实现全组合算法
<?php
/**
* 在数组$a中任意m个元素组合
*
* @param array $a 候选的集合
* @param int $n 候选的集合大小
* @param int $m 组合元素大小
* @param array $b 储存当前组合中的元素,这里储存的是元素键值
* @param int $M 相当一个常量,一直保持不变
* @return */
function combine($a,$n,$m,$b,$M){
for($i=$n;$i>=$m;$i--){
$b[$m-1]=$i-1;
if($m > 1){
$combine[]=combine($a,$i-1,$m-1,$b,$M);
}else{
$onecombine='';
for($j=$M-1;$j>=0;$j--){
$onecombine.=$a[$b[$j]];
}
$combine[]=$onecombine;
$onecombine='';
}
}
return $combine;
}
/**
* 递归输出数组
*
* @param array $arr 待输出的数组
* @return int 返回数组元素个数*/
function recursionarray($arr){
$i=0;
foreach($arr as $value){
if(is_array($value)){
$i+=recursionarray($value);
}else{
echo $value."<br/>";
$i++;
}
}
return $i;
}
$a=array('A','B','C','D','E','F','G','H','I','J');
$b=array();
$combine=combine($a,10,5,$b,5);
$count=recursionarray($combine);
echo "总共有".$count."组合";
?>