本文目录一览:
- 1、高分求解PHP数组组合问题,给个思路就行。
- 2、php怎么将两个数组合成一个数组?
- 3、PHP 多个数组的排列组合
- 4、PHP 递归处理数组,并组合成新的数组
- 5、php里面如何合并数组?
- 6、php实现全组合算法
高分求解PHP数组组合问题,给个思路就行。
下面是我写的用递归实现组合的小程序:
?php
function com($line, $x){
if (count($x)==1) echo "$line $x[0]\n";
else {
$y=array_pop($x);
com($line.' '.$y, $x);
com($line, $x);
com($line, array($y));
}
}
$a = array('A','B','C','D');
com('', $a);
?
由于程序是用\n换行,请在命令行下执行,我执行的结果如下:
E:\ygbphp a.php
D C B A
D C A
D C B
D B A
D A
D B
D C
C B A
C A
C B
B A
A
B
C
D
你如果要做新的数组,把里面的echo语句处理一下即可,注意新数组可以使用全局变量。
php怎么将两个数组合成一个数组?
PHP 中的 array_merge()、array_merge_recursive()函数可以实现
array_merge() 函数把两个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
注意:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。
array_merge(array1,array2,array3...)
参数说明
array1 必需。输入的第一个数组。
array2 必需。输入的第二个数组。
array3 可选。可指定的多个输入数组。
例如:
?php
$a1=array("a"="Horse","b"="Dog");
$a2=array("c"="Cow","b"="Cat");
print_r(array_merge($a1,$a2));
?
输出:
Array ( [a] = Horse [b] = Cat [c] = Cow )
仅使用一个数组参数:
?php
$a=array(3="Horse",4="Dog");
print_r(array_merge($a));
?
输出:
Array ( [0] = Horse [1] = Dog )
array_merge_recursive() 函数与array_merge()函数不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。
例如:
?php
$a1=array("a"="Horse","b"="Dog");
$a2=array("c"="Cow","b"="Cat");
print_r(array_merge_recursive($a1,$a2));
?
输出:
Array (
[a] = Horse
[b] = Array ( [0] = Dog [1] = Cat )
[c] = Cow
)
PHP 多个数组的排列组合
$a = array(1,2,3,4,5,6,7);
$b = array(1,2,3);
$c = array(1,2,3,4,5,6,7,8,9,10);
$d = array($a,$b,$c);
//计算每一个数组的长度
$len = 1;
$arrLen = count($d); //需要排列数组有多少个
$recIndex = null; //记录当前该取的位置
//foreach 计数
$count_3 = 0;
foreach ($d as $key = $value) {
$lenRec[$count_3] = count($value);
$len = $lenRec[$count_3]*$len;
$recIndex[] = 0;//第一次全部取第0个
$count_3++;
}
//算出% 的值
$count = 1;
foreach ($lenRec as $key = $value) {
$moduloVal = 1;
if($arrLen == $count){
$modulo[] = count($d[$arrLen-1]); //等于最后一个的长度
}else{
$count_1 = 1;
foreach ($lenRec as $index = $item) {
$count_1 $count $moduloVal = $moduloVal*$item;
$count_1 ++;
}
$modulo[] = $moduloVal;
}
$count ++;//为了防止$d key是有值的 不是自然序列 需要计数
}
$i = 1;
while ( $i = $len) {
$html = '';
$count_2 = 0;// 取模
$temp = '';
foreach ($d as $value) {
$html .= $value[$recIndex[$count_2]%$lenRec[$count_2]].",";
$count_2 ++;
}
echo $html."br";
foreach ($modulo as $key = $value) {
if($i%$value == 0 $key $arrLen - 1 ){
$recIndex[$key] = $recIndex[$key] +1;
}
if($key == $arrLen - 1){
if($i%$value == 0){
$recIndex[$key] = 0;
}else{
$recIndex[$key] = $recIndex[$key] +1;
}
}
}
$i ++;
//改变获取的位置
}
PHP 递归处理数组,并组合成新的数组
/**
* 多维数组递归合并
*/
function multimerge(){
$arrs = func_get_args();
$merged = array();
while($arrs){
$array = array_shift($arrs);
if(!$array){
continue;
}
foreach ($array as $key = $value){
if (is_string($key)){
if (is_array($value) array_key_exists($key, $merged) is_array($merged[$key])){
$merged[$key] = call_user_func(__FUNCTION__, $merged[$key], $value);
}else{
$merged[$key] = $value;
}
}else{
$merged[] = $value;
}
}
}
return $merged;
}
$a1 = array('user' = array('name' = 'tony', 'score' = 23));
$a2 = array('user' = array('name' = 'tony', 'score' = 255), 'name' ='tom');
$a3 = array('user' = array('name' = 'tony', 'score' = 288, 'test' = 'abc'), 'name' ='jack');
$result= multimerge($a1, $a2, $a3);
var_dump($result);
php里面如何合并数组?
简单的方法是使用函数array_merge(),比如array_merge($arr_one,$arr_two );
或者forech方法
forech($arr_one as $v){
$arr_two[]=$v;
}
执行后数组one的元素全部添加到数组two中了
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."组合";
?